From: helge Date: Sun, 26 Sep 2004 21:17:02 +0000 (+0000) Subject: work on the mailer X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=97034e9b8f5a1a5b250039246149c97ee2a19a47;p=scalable-opengroupware.org work on the mailer git-svn-id: http://svn.opengroupware.org/SOGo/trunk@318 d1b88da0-ebda-0310-925b-ed51d893ca5b --- diff --git a/SOGo/Main/ChangeLog b/SOGo/Main/ChangeLog index d265c4c5..bf03fa09 100644 --- a/SOGo/Main/ChangeLog +++ b/SOGo/Main/ChangeLog @@ -1,5 +1,7 @@ 2004-09-26 Helge Hess + * sogod.m: return 404 for favicon.ico queries (v0.9.13) + * fixed title bindings to const: in .wox (should be label:?) (v0.9.12) 2004-09-25 Helge Hess diff --git a/SOGo/Main/Version b/SOGo/Main/Version index 9cef7993..92c8fa08 100644 --- a/SOGo/Main/Version +++ b/SOGo/Main/Version @@ -1,3 +1,3 @@ # $Id$ -SUBMINOR_VERSION:=12 +SUBMINOR_VERSION:=13 diff --git a/SOGo/Main/sogod.m b/SOGo/Main/sogod.m index 8088e2dc..03dc26e6 100644 --- a/SOGo/Main/sogod.m +++ b/SOGo/Main/sogod.m @@ -93,7 +93,7 @@ static BOOL doCrashOnSessionCreate = NO; - (BOOL)isUserName:(NSString *)_key inContext:(id)_ctx { if ([_key length] < 1) return NO; - + if (isdigit([_key characterAtIndex:0])) return NO; @@ -132,15 +132,14 @@ static BOOL doCrashOnSessionCreate = NO; /* The problem is, that at this point we still get request for resources, eg 'favicon.ico'. - The hack here is to check for a dot in the key, but we should find a way - to catch that in a more sensible way. - - One way to check for a valid key would be to check whether the key is a - valid hostname, but I would like to avoid that for performance reasons. Addition: we also get queries for various other methods, like "GET" if no method was provided in the query path. */ + + if ([_key isEqualToString:@"favicon.ico"]) + return nil; + if ([self isUserName:_key inContext:_ctx]) return [self lookupUser:_key inContext:_ctx]; diff --git a/SOGo/README b/SOGo/README index 83fb015c..0383ac1c 100644 --- a/SOGo/README +++ b/SOGo/README @@ -22,3 +22,5 @@ NOTES mapping email <-> logins usermanager -> part of SOGoLogic +Default to enable debugging output in the page: + SOGoUIxDebugEnabled YES|NO diff --git a/SOGo/SOGo.xcode/helge.pbxuser b/SOGo/SOGo.xcode/helge.pbxuser index 14e87cb4..64f50e92 100644 --- a/SOGo/SOGo.xcode/helge.pbxuser +++ b/SOGo/SOGo.xcode/helge.pbxuser @@ -1,5 +1,25 @@ // !$*UTF8*$! { + E82F8A4207075D7100CDD2CA = { + fRef = E87205F40692E3D00099CBBD; + isa = PBXTextBookmark; + name = "README: 4"; + rLen = 0; + rLoc = 17; + rType = 0; + vrLen = 404; + vrLoc = 0; + }; + E82F8A4607075D7100CDD2CA = { + fRef = E87205F40692E3D00099CBBD; + isa = PBXTextBookmark; + name = "README: 3"; + rLen = 0; + rLoc = 12; + rType = 0; + vrLen = 404; + vrLoc = 0; + }; E87205890692E3B40099CBBD = { activeBuildStyle = E87205870692E3B40099CBBD; activeTarget = E8720A7A0692E5010099CBBD; @@ -12,9 +32,9 @@ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 294, + 273, 20, - 57, + 53, 43, 43, 20, @@ -29,7 +49,29 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 110289844; + PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 215, + 50, + 20, + 50, + 43, + 43, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXTargetDataSource_PrimaryAttribute, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 117923177; PBXPrepackagedSmartGroups_v2 = ( { PBXTransientLocationAtTop = bottom; @@ -194,6 +236,17 @@ root = ""; }; }, + { + PBXTransientLocationAtTop = bottom; + clz = XDDesignSmartGroup; + description = "Displays Xdesign models"; + globalID = 2E4A936305E6979E00701470; + name = Design; + preferences = { + image = Design; + isLeaf = 0; + }; + }, ); PBXWorkspaceContents = ( { @@ -415,43 +468,21 @@ }; RubberWindowFrame = "114 92 779 734 0 0 1280 832 "; }; - PBXWorkspaceStateSaveDate = 110289844; + PBXWorkspaceStateSaveDate = 117923177; }; perUserProjectItems = { - E8720A070692E4930099CBBD = E8720A070692E4930099CBBD; - E8720A090692E4930099CBBD = E8720A090692E4930099CBBD; - E8720A110692E49A0099CBBD = E8720A110692E49A0099CBBD; - E8720A130692E49A0099CBBD = E8720A130692E49A0099CBBD; - E8720A170692E4A20099CBBD = E8720A170692E4A20099CBBD; - E8720A190692E4A20099CBBD = E8720A190692E4A20099CBBD; - E8720A1D0692E4A90099CBBD = E8720A1D0692E4A90099CBBD; - E8720A1F0692E4A90099CBBD = E8720A1F0692E4A90099CBBD; - E8720A220692E4A90099CBBD = E8720A220692E4A90099CBBD; - E8720A240692E4A90099CBBD = E8720A240692E4A90099CBBD; - E8720A300692E4BA0099CBBD = E8720A300692E4BA0099CBBD; - E8720A320692E4BA0099CBBD = E8720A320692E4BA0099CBBD; - E8720A360692E4C00099CBBD = E8720A360692E4C00099CBBD; - E8720A380692E4C00099CBBD = E8720A380692E4C00099CBBD; - E8720A440692E4CC0099CBBD = E8720A440692E4CC0099CBBD; - E8720A460692E4CC0099CBBD = E8720A460692E4CC0099CBBD; - E8720A4E0692E4DB0099CBBD = E8720A4E0692E4DB0099CBBD; - E8720A500692E4DB0099CBBD = E8720A500692E4DB0099CBBD; - E8720A5C0692E4E40099CBBD = E8720A5C0692E4E40099CBBD; - E8720A5E0692E4E40099CBBD = E8720A5E0692E4E40099CBBD; - E8720A620692E4E70099CBBD = E8720A620692E4E70099CBBD; - E8720A640692E4E70099CBBD = E8720A640692E4E70099CBBD; - E8720A700692E4F20099CBBD = E8720A700692E4F20099CBBD; - E8720A720692E4F20099CBBD = E8720A720692E4F20099CBBD; - E8720A7E0692E5020099CBBD = E8720A7E0692E5020099CBBD; - E8720A7F0692E5020099CBBD = E8720A7F0692E5020099CBBD; - E8720A800692E5020099CBBD = E8720A800692E5020099CBBD; - E8720A820692E50C0099CBBD = E8720A820692E50C0099CBBD; + E82F8A4207075D7100CDD2CA = E82F8A4207075D7100CDD2CA; + E82F8A4607075D7100CDD2CA = E82F8A4607075D7100CDD2CA; + E8E5318507075AF1002E3166 = E8E5318507075AF1002E3166; + E8E5318707075AF1002E3166 = E8E5318707075AF1002E3166; }; sourceControlManager = E872058A0692E3B40099CBBD; userBuildSettings = { }; }; E872058A0692E3B40099CBBD = { + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; isa = PBXSourceControlManager; scmConfiguration = { }; @@ -462,15 +493,22 @@ isa = PBXCodeSenseManager; usesDefaults = 1; wantsCodeCompletion = 1; - wantsCodeCompletionAutoPopup = 0; wantsCodeCompletionAutoSuggestions = 0; wantsCodeCompletionCaseSensitivity = 1; + wantsCodeCompletionListAlways = 1; wantsCodeCompletionOnlyMatchingItems = 1; wantsCodeCompletionParametersIncluded = 1; wantsCodeCompletionPlaceholdersInserted = 1; wantsCodeCompletionTabCompletes = 1; wantsIndex = 1; }; + E87205F40692E3D00099CBBD = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {470, 448}}"; + sepNavSelRange = "{12, 0}"; + sepNavVisRect = "{{0, 0}, {470, 448}}"; + }; + }; E872064C0692E3D00099CBBD = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {493, 311}}"; @@ -492,20 +530,6 @@ sepNavVisRect = "{{0, 0}, {493, 311}}"; }; }; - E87207D40692E3D20099CBBD = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {493, 311}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {493, 311}}"; - }; - }; - E87207DC0692E3D20099CBBD = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {493, 783}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {493, 311}}"; - }; - }; E87207E70692E3D20099CBBD = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {493, 2799}}"; @@ -562,285 +586,15 @@ sepNavVisRect = "{{0, 0}, {493, 311}}"; }; }; - E8720A070692E4930099CBBD = { - fRef = E872064C0692E3D00099CBBD; - isa = PBXTextBookmark; - name = "GNUmakefile: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 136; - vrLoc = 0; - }; - E8720A090692E4930099CBBD = { - fRef = E872064C0692E3D00099CBBD; - isa = PBXTextBookmark; - name = "GNUmakefile: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 136; - vrLoc = 0; - }; - E8720A110692E49A0099CBBD = { - fRef = E87208930692E3D30099CBBD; - isa = PBXTextBookmark; - name = "GNUmakefile: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 547; - vrLoc = 0; - }; - E8720A130692E49A0099CBBD = { - fRef = E87208930692E3D30099CBBD; - isa = PBXTextBookmark; - name = "GNUmakefile: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 547; - vrLoc = 0; - }; - E8720A170692E4A20099CBBD = { - fRef = E87208D30692E3D30099CBBD; - isa = PBXTextBookmark; - name = "NOTES: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 389; - vrLoc = 0; - }; - E8720A190692E4A20099CBBD = { - fRef = E87208D30692E3D30099CBBD; - isa = PBXTextBookmark; - name = "NOTES: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 389; - vrLoc = 0; - }; - E8720A1D0692E4A90099CBBD = { - fRef = E87208F50692E3D30099CBBD; - isa = PBXTextBookmark; - name = "UIxAppointmentFormatter.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 896; - vrLoc = 0; - }; - E8720A1F0692E4A90099CBBD = { - fRef = E87208F50692E3D30099CBBD; - isa = PBXTextBookmark; - name = "UIxAppointmentFormatter.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 896; - vrLoc = 0; - }; - E8720A220692E4A90099CBBD = { - fRef = E87208F60692E3D30099CBBD; - isa = PBXTextBookmark; - name = "UIxAppointmentFormatter.m: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 895; - vrLoc = 0; - }; - E8720A240692E4A90099CBBD = { - fRef = E87208F60692E3D30099CBBD; - isa = PBXTextBookmark; - name = "UIxAppointmentFormatter.m: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 895; - vrLoc = 0; - }; - E8720A300692E4BA0099CBBD = { - fRef = E87208F80692E3D30099CBBD; - isa = PBXTextBookmark; - name = "UIxAppointmentView.m: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 440; - vrLoc = 0; - }; - E8720A320692E4BA0099CBBD = { - fRef = E87208F80692E3D30099CBBD; - isa = PBXTextBookmark; - name = "UIxAppointmentView.m: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 440; - vrLoc = 0; - }; - E8720A360692E4C00099CBBD = { - fRef = E87209020692E3D30099CBBD; - isa = PBXTextBookmark; - name = "UIxCalMonthView.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 437; - vrLoc = 0; - }; - E8720A380692E4C00099CBBD = { - fRef = E87209020692E3D30099CBBD; - isa = PBXTextBookmark; - name = "UIxCalMonthView.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 437; - vrLoc = 0; - }; - E8720A440692E4CC0099CBBD = { - fRef = E87208900692E3D30099CBBD; - isa = PBXTextBookmark; - name = "common.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 882; - vrLoc = 0; - }; - E8720A460692E4CC0099CBBD = { - fRef = E87208900692E3D30099CBBD; - isa = PBXTextBookmark; - name = "common.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 882; - vrLoc = 0; - }; - E8720A4E0692E4DB0099CBBD = { - fRef = E872074D0692E3D20099CBBD; - isa = PBXTextBookmark; - name = "GNUmakefile: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 462; - vrLoc = 0; - }; - E8720A500692E4DB0099CBBD = { - fRef = E872074D0692E3D20099CBBD; - isa = PBXTextBookmark; - name = "GNUmakefile: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 462; - vrLoc = 0; - }; - E8720A5C0692E4E40099CBBD = { - fRef = E87207D40692E3D20099CBBD; - isa = PBXTextBookmark; - name = "UIxAppFrame.m: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 204; - vrLoc = 0; - }; - E8720A5E0692E4E40099CBBD = { - fRef = E87207D40692E3D20099CBBD; - isa = PBXTextBookmark; - name = "UIxAppFrame.m: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 204; - vrLoc = 0; - }; - E8720A620692E4E70099CBBD = { - fRef = E87207DC0692E3D20099CBBD; - isa = PBXTextBookmark; - name = "UIxComponent.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 833; - vrLoc = 0; - }; - E8720A640692E4E70099CBBD = { - fRef = E87207DC0692E3D20099CBBD; - isa = PBXTextBookmark; - name = "UIxComponent.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 833; - vrLoc = 0; - }; - E8720A700692E4F20099CBBD = { - fRef = E872074A0692E3D20099CBBD; - isa = PBXTextBookmark; - name = "common.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 877; - vrLoc = 0; - }; - E8720A720692E4F20099CBBD = { - fRef = E872074A0692E3D20099CBBD; - isa = PBXTextBookmark; - name = "common.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 877; - vrLoc = 0; - }; E8720A7A0692E5010099CBBD = { activeExec = 0; }; - E8720A7E0692E5020099CBBD = { - fRef = E87207E70692E3D20099CBBD; - isa = PBXTextBookmark; - name = "zidestoreui.css: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 511; - vrLoc = 0; - }; - E8720A7F0692E5020099CBBD = { + E8E5318507075AF1002E3166 = { isa = PBXTargetBookmark; trg = E8720A7A0692E5010099CBBD; }; - E8720A800692E5020099CBBD = { - fRef = E87207E70692E3D20099CBBD; - isa = PBXTextBookmark; - name = "zidestoreui.css: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 511; - vrLoc = 0; - }; - E8720A820692E50C0099CBBD = { + E8E5318707075AF1002E3166 = { isa = PBXTargetBookmark; trg = E8720A7A0692E5010099CBBD; - uiCtxt = { - TOCViewDetailVisibleRect = "{{0, 160}, {361, 279}}"; - TOCViewExpandedItems = ( - "com.apple.target-editor-pane.settings", - ); - TOCViewMasterVisibleRect = "{{0, 0}, {140, 279}}"; - TOCViewSelectedItems = ( - "com.apple.target-editor-pane.settings", - ); - }; }; } diff --git a/SOGo/SOGo.xcode/project.pbxproj b/SOGo/SOGo.xcode/project.pbxproj index 8e959968..d48109fb 100644 --- a/SOGo/SOGo.xcode/project.pbxproj +++ b/SOGo/SOGo.xcode/project.pbxproj @@ -3668,7 +3668,7 @@ sourceTree = ""; }; E8720A7A0692E5010099CBBD = { - buildArgumentsString = "$(ACTION)"; + buildArgumentsString = "$(ACTION) GNUSTEP_SYSTEM_ROOT=$(HOME)/GNUstep"; buildPhases = ( ); buildSettings = { diff --git a/SOGo/SoObjects/Mailer/ChangeLog b/SOGo/SoObjects/Mailer/ChangeLog index 3ab5e637..a499dfd9 100644 --- a/SOGo/SoObjects/Mailer/ChangeLog +++ b/SOGo/SoObjects/Mailer/ChangeLog @@ -1,3 +1,13 @@ +2004-09-26 Helge Hess + + * v0.9.5 + + * added SOGoMailBaseObject as a base object for the other mailer + SoObjects + + * added -imapURL method to the mail SoObjects (the imapURL is used to + locate the object in the IMAP4 server, just like in Thunderbird) + 2004-09-25 Helge Hess * fixed compilation on MacOSX (v0.9.4) diff --git a/SOGo/SoObjects/Mailer/GNUmakefile b/SOGo/SoObjects/Mailer/GNUmakefile index 99c8af81..b14a2948 100644 --- a/SOGo/SoObjects/Mailer/GNUmakefile +++ b/SOGo/SoObjects/Mailer/GNUmakefile @@ -9,6 +9,7 @@ Mailer_PRINCIPAL_CLASS = SOGoMailerProduct Mailer_OBJC_FILES += \ Product.m \ \ + SOGoMailBaseObject.m \ SOGoMailAccounts.m \ SOGoMailAccount.m \ SOGoMailFolder.m \ diff --git a/SOGo/SoObjects/Mailer/SOGoMailAccount.h b/SOGo/SoObjects/Mailer/SOGoMailAccount.h index b889536f..9d17b5e6 100644 --- a/SOGo/SoObjects/Mailer/SOGoMailAccount.h +++ b/SOGo/SoObjects/Mailer/SOGoMailAccount.h @@ -23,7 +23,7 @@ #ifndef __Mailer_SOGoMailAccount_H__ #define __Mailer_SOGoMailAccount_H__ -#include +#include /* SOGoMailAccount @@ -34,9 +34,7 @@ password, etc) */ -@class NSString, NSArray, NSCalendarDate, NSException; - -@interface SOGoMailAccount : SOGoObject +@interface SOGoMailAccount : SOGoMailBaseObject { } diff --git a/SOGo/SoObjects/Mailer/SOGoMailAccount.m b/SOGo/SoObjects/Mailer/SOGoMailAccount.m index 92babab1..95a857a0 100644 --- a/SOGo/SoObjects/Mailer/SOGoMailAccount.m +++ b/SOGo/SoObjects/Mailer/SOGoMailAccount.m @@ -21,8 +21,58 @@ // $Id: SOGoMailAccount.m 274 2004-08-26 13:10:49Z znek $ #include "SOGoMailAccount.h" +#include "SOGoMailFolder.h" #include "common.h" @implementation SOGoMailAccount +/* IMAP4 */ + +- (BOOL)useSSL { + return NO; +} + +- (NSURL *)imap4URL { + /* imap://agenortest@mail.opengroupware.org/INBOX/withsubdirs/subdir1 */ + NSString *s; + NSRange r; + + if (self->imap4URL != nil) + return self->imap4URL; + + s = [self nameInContainer]; + r = [s rangeOfString:@"@"]; + if (r.length == 0) { + [self logWithFormat:@"ERROR: missing login in account folder name: %@", s]; + return nil; + } + + s = [([self useSSL] ? @"imaps://" : @"imap://") stringByAppendingString:s]; + s = [s stringByAppendingString:@"/"]; + + self->imap4URL = [[NSURL alloc] initWithString:s]; + return self->imap4URL; +} + +/* name lookup */ + +- (id)lookupImap4Folder:(NSString *)_key inContext:(id)_ctx { + return [[[SOGoMailFolder alloc] initWithName:_key + inContainer:self] autorelease]; +} + +- (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag { + id obj; + + /* first check attributes directly bound to the application */ + if ((obj = [super lookupName:_key inContext:_ctx acquire:NO]) != nil) + return obj; + + if ((obj = [self lookupImap4Folder:_key inContext:_ctx]) != nil) + return obj; + + /* return 404 to stop acquisition */ + return [NSException exceptionWithHTTPStatus:404 /* Not Found */]; +} + @end /* SOGoMailAccount */ diff --git a/SOGo/SoObjects/Mailer/SOGoMailAccounts.h b/SOGo/SoObjects/Mailer/SOGoMailAccounts.h index e8624754..fd4ac223 100644 --- a/SOGo/SoObjects/Mailer/SOGoMailAccounts.h +++ b/SOGo/SoObjects/Mailer/SOGoMailAccounts.h @@ -32,9 +32,10 @@ The SOGoMailAccounts folder contains the mail accounts which are associated with a user. -*/ -@class NSString, NSArray, NSCalendarDate, NSException; + Note: this is not yet an IMAP4 object. Its a wrapper which contains the root + IMAP4 objects. +*/ @interface SOGoMailAccounts : SOGoObject { diff --git a/SOGo/SoObjects/Mailer/SOGoMailAccounts.m b/SOGo/SoObjects/Mailer/SOGoMailAccounts.m index 2856feb0..1f27e1d9 100644 --- a/SOGo/SoObjects/Mailer/SOGoMailAccounts.m +++ b/SOGo/SoObjects/Mailer/SOGoMailAccounts.m @@ -28,9 +28,9 @@ /* listing the available mailboxes */ - (NSArray *)toManyRelationshipKeys { - // TODO: hardcoded + // TODO: hardcoded, need to implement the Agenor Anais LDAP query? return [NSArray arrayWithObjects: - @"mail.opengroupware.org", + @"agenortest@mail.opengroupware.org", nil]; } diff --git a/SOGo/SoObjects/Mailer/SOGoMailBaseObject.h b/SOGo/SoObjects/Mailer/SOGoMailBaseObject.h new file mode 100644 index 00000000..b78c0a2c --- /dev/null +++ b/SOGo/SoObjects/Mailer/SOGoMailBaseObject.h @@ -0,0 +1,49 @@ +/* + Copyright (C) 2004 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + OGo is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + +#ifndef __Mailer_SOGoMailBaseObject_H__ +#define __Mailer_SOGoMailBaseObject_H__ + +#include + +/* + SOGoMailBaseObject + + Common base class for mailer SoObjects. +*/ + +@class NSURL; + +@interface SOGoMailBaseObject : SOGoObject +{ + NSURL *imap4URL; +} + +- (id)initWithImap4URL:(NSURL *)_url inContainer:(id)_container; + +/* IMAP4 */ + +- (NSURL *)imap4URL; + +@end + +#endif /* __Mailer_SOGoMailBaseObject_H__ */ diff --git a/SOGo/SoObjects/Mailer/SOGoMailBaseObject.m b/SOGo/SoObjects/Mailer/SOGoMailBaseObject.m new file mode 100644 index 00000000..847445b0 --- /dev/null +++ b/SOGo/SoObjects/Mailer/SOGoMailBaseObject.m @@ -0,0 +1,69 @@ +/* + Copyright (C) 2004 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + OGo is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + +#include "SOGoMailBaseObject.h" +#include "common.h" + +@implementation SOGoMailBaseObject + +- (id)initWithImap4URL:(NSURL *)_url inContainer:(id)_container { + NSString *n; + + n = [[_url path] lastPathComponent]; + if ((self = [self initWithName:n inContainer:_container])) { + self->imap4URL = [_url retain]; + } + return self; +} + +- (void)dealloc { + [self->imap4URL release]; + [super dealloc]; +} + +/* IMAP4 */ + +- (NSString *)relativeImap4Name { + [self logWithFormat:@"WARNING: subclass should override %@", + NSStringFromSelector(_cmd)]; + return nil; +} +- (NSURL *)imap4URL { + NSString *sn; + + if (self->imap4URL != nil) + return self->imap4URL; + + if ((sn = [self relativeImap4Name]) == nil) + return nil; + + if (![[self container] respondsToSelector:_cmd]) { + [self logWithFormat:@"WARNING: container does not implement -imap4URL!"]; + return nil; + } + + self->imap4URL = [[NSURL alloc] initWithString:[self nameInContainer] + relativeToURL:[[self container] imap4URL]]; + return self->imap4URL; +} + +@end /* SOGoMailBaseObject */ diff --git a/SOGo/SoObjects/Mailer/SOGoMailFolder.h b/SOGo/SoObjects/Mailer/SOGoMailFolder.h index f93bcb74..373fbd7d 100644 --- a/SOGo/SoObjects/Mailer/SOGoMailFolder.h +++ b/SOGo/SoObjects/Mailer/SOGoMailFolder.h @@ -23,7 +23,7 @@ #ifndef __Mailer_SOGoMailFolder_H__ #define __Mailer_SOGoMailFolder_H__ -#include +#include /* SOGoMailFolder @@ -33,9 +33,7 @@ The SOGoMailFolder maps to an IMAP4 folder from NGImap4. */ -@class NSString, NSArray, NSCalendarDate, NSException; - -@interface SOGoMailFolder : SOGoObject +@interface SOGoMailFolder : SOGoMailBaseObject { } diff --git a/SOGo/SoObjects/Mailer/SOGoMailFolder.m b/SOGo/SoObjects/Mailer/SOGoMailFolder.m index 772c873f..fd993a62 100644 --- a/SOGo/SoObjects/Mailer/SOGoMailFolder.m +++ b/SOGo/SoObjects/Mailer/SOGoMailFolder.m @@ -21,8 +21,64 @@ // $Id$ #include "SOGoMailFolder.h" +#include "SOGoMailObject.h" #include "common.h" @implementation SOGoMailFolder +/* IMAP4 */ + +- (NSString *)relativeImap4Name { + return [self nameInContainer]; +} + +/* name lookup */ + +- (BOOL)isMessageKey:(NSString *)_key inContext:(id)_ctx { + /* + Every key starting with a digit is consider an IMAP4 message key. This is + not entirely correct since folders could also start with a number. + + If we want to support folders beginning with numbers, we would need to + scan the folder list for the _key, which would make everything quite a bit + slower. + TODO: support this mode using a default. + */ + if ([_key length] == 0) + return NO; + + if (isdigit([_key characterAtIndex:0])) + return YES; + + return NO; +} + +- (id)lookupImap4Folder:(NSString *)_key inContext:(id)_ctx { + // TODO: we might want to check for existence prior controller creation + return [[[SOGoMailFolder alloc] initWithName:_key + inContainer:self] autorelease]; +} +- (id)lookupImap4Message:(NSString *)_key inContext:(id)_ctx { + // TODO: we might want to check for existence prior controller creation + return [[[SOGoMailObject alloc] initWithName:_key + inContainer:self] autorelease]; +} + +- (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag { + id obj; + + /* first check attributes directly bound to the application */ + if ((obj = [super lookupName:_key inContext:_ctx acquire:NO]) != nil) + return obj; + + obj = [self isMessageKey:_key inContext:_ctx] + ? [self lookupImap4Message:_key inContext:_ctx] + : [self lookupImap4Folder:_key inContext:_ctx]; + if (obj != nil) + return obj; + + /* return 404 to stop acquisition */ + return [NSException exceptionWithHTTPStatus:404 /* Not Found */]; +} + @end /* SOGoMailFolder */ diff --git a/SOGo/SoObjects/Mailer/SOGoMailObject.h b/SOGo/SoObjects/Mailer/SOGoMailObject.h index 351017e2..5aca122c 100644 --- a/SOGo/SoObjects/Mailer/SOGoMailObject.h +++ b/SOGo/SoObjects/Mailer/SOGoMailObject.h @@ -23,7 +23,7 @@ #ifndef __Mailer_SOGoMailObject_H__ #define __Mailer_SOGoMailObject_H__ -#include +#include /* SOGoMailObject @@ -33,9 +33,7 @@ Represents a single mail as retrieved using NGImap4. */ -@class NSString, NSArray, NSException; - -@interface SOGoMailObject : SOGoObject +@interface SOGoMailObject : SOGoMailBaseObject { } diff --git a/SOGo/SoObjects/Mailer/SOGoMailObject.m b/SOGo/SoObjects/Mailer/SOGoMailObject.m index 4fc947c6..608841d5 100644 --- a/SOGo/SoObjects/Mailer/SOGoMailObject.m +++ b/SOGo/SoObjects/Mailer/SOGoMailObject.m @@ -25,4 +25,10 @@ @implementation SOGoMailObject +/* IMAP4 */ + +- (NSString *)relativeImap4Name { + return [self nameInContainer]; +} + @end /* SOGoMailObject */ diff --git a/SOGo/SoObjects/Mailer/Version b/SOGo/SoObjects/Mailer/Version index 749d66dc..6b227f7e 100644 --- a/SOGo/SoObjects/Mailer/Version +++ b/SOGo/SoObjects/Mailer/Version @@ -1,3 +1,3 @@ # $Id$ -SUBMINOR_VERSION:=4 +SUBMINOR_VERSION:=5 diff --git a/SOGo/SoObjects/Mailer/product.plist b/SOGo/SoObjects/Mailer/product.plist index 9e7adb65..539c0e8c 100644 --- a/SOGo/SoObjects/Mailer/product.plist +++ b/SOGo/SoObjects/Mailer/product.plist @@ -8,20 +8,24 @@ }; classes = { - SOGoMailAccounts = { + SOGoMailBaseObject = { superclass = "SOGoObject"; }; + SOGoMailAccounts = { + superclass = "SOGoMailBaseObject"; + }; + SOGoMailAccount = { - superclass = "SOGoObject"; + superclass = "SOGoMailBaseObject"; }; SOGoMailFolder = { - superclass = "SOGoObject"; + superclass = "SOGoMailBaseObject"; }; SOGoMailObject = { - superclass = "SOGoObject"; + superclass = "SOGoMailBaseObject"; }; }; } diff --git a/SOGo/UI/Mailer/UIxMailListView.wox b/SOGo/UI/Mailer/UIxMailListView.wox index cebf5060..d07c5e15 100644 --- a/SOGo/UI/Mailer/UIxMailListView.wox +++ b/SOGo/UI/Mailer/UIxMailListView.wox @@ -1,11 +1,14 @@ - - - \ No newline at end of file +

Mail Folder Page

+ screenshot + diff --git a/SOGo/UI/Mailer/UIxMailMainFrame.wox b/SOGo/UI/Mailer/UIxMailMainFrame.wox index 6d8f9f3b..778ef8f7 100644 --- a/SOGo/UI/Mailer/UIxMailMainFrame.wox +++ b/SOGo/UI/Mailer/UIxMailMainFrame.wox @@ -45,6 +45,11 @@ clientObject: + + IMAP4-URL: + + traversal stack: diff --git a/SOGo/UI/SOGoUI/ChangeLog b/SOGo/UI/SOGoUI/ChangeLog index f9aac34e..891f60ec 100644 --- a/SOGo/UI/SOGoUI/ChangeLog +++ b/SOGo/UI/SOGoUI/ChangeLog @@ -1,3 +1,7 @@ +2004-09-26 Helge Hess + + * UIxComponent.m: minor code cleanups (v0.9.13) + 2004-09-25 Helge Hess * v0.9.12 diff --git a/SOGo/UI/SOGoUI/UIxComponent.m b/SOGo/UI/SOGoUI/UIxComponent.m index d9b6abff..905fcd79 100644 --- a/SOGo/UI/SOGoUI/UIxComponent.m +++ b/SOGo/UI/SOGoUI/UIxComponent.m @@ -20,90 +20,87 @@ */ // $Id$ - #include "UIxComponent.h" #include "common.h" #include - @interface UIxComponent (PrivateAPI) - (void)_parseQueryString:(NSString *)_s; @end - @implementation UIxComponent static NSTimeZone *MET = nil; static NSTimeZone *GMT = nil; -static NSMutableArray *dayLabelKeys = nil; -static NSMutableArray *abbrDayLabelKeys = nil; -static NSMutableArray *monthLabelKeys = nil; +static NSMutableArray *dayLabelKeys = nil; +static NSMutableArray *abbrDayLabelKeys = nil; +static NSMutableArray *monthLabelKeys = nil; static NSMutableArray *abbrMonthLabelKeys = nil; static BOOL uixDebugEnabled = NO; + (void)initialize { - NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; - uixDebugEnabled = [ud boolForKey:@"SOGoUIxDebugEnabled"]; + uixDebugEnabled = [ud boolForKey:@"SOGoUIxDebugEnabled"]; - if (MET == nil) { - MET = [[NSTimeZone timeZoneWithAbbreviation:@"MET"] retain]; - GMT = [[NSTimeZone timeZoneWithAbbreviation:@"GMT"] retain]; - } - if (dayLabelKeys == nil) { - dayLabelKeys = [[NSMutableArray alloc] initWithCapacity:7]; - [dayLabelKeys addObject:@"Sunday"]; - [dayLabelKeys addObject:@"Monday"]; - [dayLabelKeys addObject:@"Tuesday"]; - [dayLabelKeys addObject:@"Wednesday"]; - [dayLabelKeys addObject:@"Thursday"]; - [dayLabelKeys addObject:@"Friday"]; - [dayLabelKeys addObject:@"Saturday"]; - - abbrDayLabelKeys = [[NSMutableArray alloc] initWithCapacity:7]; - [abbrDayLabelKeys addObject:@"a2_Sunday"]; - [abbrDayLabelKeys addObject:@"a2_Monday"]; - [abbrDayLabelKeys addObject:@"a2_Tuesday"]; - [abbrDayLabelKeys addObject:@"a2_Wednesday"]; - [abbrDayLabelKeys addObject:@"a2_Thursday"]; - [abbrDayLabelKeys addObject:@"a2_Friday"]; - [abbrDayLabelKeys addObject:@"a2_Saturday"]; - - monthLabelKeys = [[NSMutableArray alloc] initWithCapacity:12]; - [monthLabelKeys addObject:@"January"]; - [monthLabelKeys addObject:@"February"]; - [monthLabelKeys addObject:@"March"]; - [monthLabelKeys addObject:@"April"]; - [monthLabelKeys addObject:@"May"]; - [monthLabelKeys addObject:@"June"]; - [monthLabelKeys addObject:@"July"]; - [monthLabelKeys addObject:@"August"]; - [monthLabelKeys addObject:@"September"]; - [monthLabelKeys addObject:@"October"]; - [monthLabelKeys addObject:@"November"]; - [monthLabelKeys addObject:@"December"]; - - abbrMonthLabelKeys = [[NSMutableArray alloc] initWithCapacity:12]; - [abbrMonthLabelKeys addObject:@"a3_January"]; - [abbrMonthLabelKeys addObject:@"a3_February"]; - [abbrMonthLabelKeys addObject:@"a3_March"]; - [abbrMonthLabelKeys addObject:@"a3_April"]; - [abbrMonthLabelKeys addObject:@"a3_May"]; - [abbrMonthLabelKeys addObject:@"a3_June"]; - [abbrMonthLabelKeys addObject:@"a3_July"]; - [abbrMonthLabelKeys addObject:@"a3_August"]; - [abbrMonthLabelKeys addObject:@"a3_September"]; - [abbrMonthLabelKeys addObject:@"a3_October"]; - [abbrMonthLabelKeys addObject:@"a3_November"]; - [abbrMonthLabelKeys addObject:@"a3_December"]; - } + if (MET == nil) { + MET = [[NSTimeZone timeZoneWithAbbreviation:@"MET"] retain]; + GMT = [[NSTimeZone timeZoneWithAbbreviation:@"GMT"] retain]; + } + if (dayLabelKeys == nil) { + dayLabelKeys = [[NSMutableArray alloc] initWithCapacity:7]; + [dayLabelKeys addObject:@"Sunday"]; + [dayLabelKeys addObject:@"Monday"]; + [dayLabelKeys addObject:@"Tuesday"]; + [dayLabelKeys addObject:@"Wednesday"]; + [dayLabelKeys addObject:@"Thursday"]; + [dayLabelKeys addObject:@"Friday"]; + [dayLabelKeys addObject:@"Saturday"]; + + abbrDayLabelKeys = [[NSMutableArray alloc] initWithCapacity:7]; + [abbrDayLabelKeys addObject:@"a2_Sunday"]; + [abbrDayLabelKeys addObject:@"a2_Monday"]; + [abbrDayLabelKeys addObject:@"a2_Tuesday"]; + [abbrDayLabelKeys addObject:@"a2_Wednesday"]; + [abbrDayLabelKeys addObject:@"a2_Thursday"]; + [abbrDayLabelKeys addObject:@"a2_Friday"]; + [abbrDayLabelKeys addObject:@"a2_Saturday"]; + + monthLabelKeys = [[NSMutableArray alloc] initWithCapacity:12]; + [monthLabelKeys addObject:@"January"]; + [monthLabelKeys addObject:@"February"]; + [monthLabelKeys addObject:@"March"]; + [monthLabelKeys addObject:@"April"]; + [monthLabelKeys addObject:@"May"]; + [monthLabelKeys addObject:@"June"]; + [monthLabelKeys addObject:@"July"]; + [monthLabelKeys addObject:@"August"]; + [monthLabelKeys addObject:@"September"]; + [monthLabelKeys addObject:@"October"]; + [monthLabelKeys addObject:@"November"]; + [monthLabelKeys addObject:@"December"]; + + abbrMonthLabelKeys = [[NSMutableArray alloc] initWithCapacity:12]; + [abbrMonthLabelKeys addObject:@"a3_January"]; + [abbrMonthLabelKeys addObject:@"a3_February"]; + [abbrMonthLabelKeys addObject:@"a3_March"]; + [abbrMonthLabelKeys addObject:@"a3_April"]; + [abbrMonthLabelKeys addObject:@"a3_May"]; + [abbrMonthLabelKeys addObject:@"a3_June"]; + [abbrMonthLabelKeys addObject:@"a3_July"]; + [abbrMonthLabelKeys addObject:@"a3_August"]; + [abbrMonthLabelKeys addObject:@"a3_September"]; + [abbrMonthLabelKeys addObject:@"a3_October"]; + [abbrMonthLabelKeys addObject:@"a3_November"]; + [abbrMonthLabelKeys addObject:@"a3_December"]; + } } - (id)init { if ((self = [super init])) { - self->queryParameters = [[NSMutableDictionary alloc] init]; + self->queryParameters = [[NSMutableDictionary alloc] initWithCapacity:8]; } return self; } @@ -113,6 +110,7 @@ static BOOL uixDebugEnabled = NO; [super dealloc]; } +/* notifications */ - (void)awake { WORequest *req; @@ -133,6 +131,8 @@ static BOOL uixDebugEnabled = NO; } } +/* query parameters */ + - (void)_parseQueryString:(NSString *)_s { NSEnumerator *e; NSString *part; @@ -175,7 +175,7 @@ static BOOL uixDebugEnabled = NO; return self->queryParameters; } -- (NSDictionary *)queryParametersBySettingSelectedDate:(NSCalendarDate *)_date { +- (NSDictionary *)queryParametersBySettingSelectedDate:(NSCalendarDate *)_date{ NSMutableDictionary *qp; qp = [[self queryParameters] mutableCopy]; @@ -184,7 +184,7 @@ static BOOL uixDebugEnabled = NO; } - (void)setSelectedDateQueryParameter:(NSCalendarDate *)_newDate - inDictionary:(NSMutableDictionary *)_qp; + inDictionary:(NSMutableDictionary *)_qp; { if(_newDate != nil) [_qp setObject:[self dateStringForDate:_newDate] forKey:@"day"]; @@ -251,14 +251,14 @@ static BOOL uixDebugEnabled = NO; [cdate setTimeZone:[self viewTimeZone]]; s = [self queryParameterForKey:@"hm"]; if([s length] == 4) { - unsigned hour, minute; + unsigned hour, minute; - hour = [[s substringToIndex:2] unsignedIntValue]; - minute = [[s substringFromIndex:2] unsignedIntValue]; - cdate = [cdate hour:hour minute:minute]; + hour = [[s substringToIndex:2] unsignedIntValue]; + minute = [[s substringFromIndex:2] unsignedIntValue]; + cdate = [cdate hour:hour minute:minute]; } else { - cdate = [cdate hour:12 minute:0]; + cdate = [cdate hour:12 minute:0]; } return cdate; } @@ -277,123 +277,122 @@ static BOOL uixDebugEnabled = NO; /* SoUser */ - (SoUser *)user { - WOContext *ctx; - - ctx = [self context]; - return [[[self clientObject] authenticatorInContext:ctx] - userInContext:ctx]; + WOContext *ctx; + + ctx = [self context]; + return [[[self clientObject] authenticatorInContext:ctx] userInContext:ctx]; } - (NSString *)shortUserNameForDisplay { - // TODO: better use a SoUser formatter? - NSString *s; - NSRange r; + // TODO: better use a SoUser formatter? + NSString *s; + NSRange r; #warning !! USE USER MANAGER INSTEAD! - s = [[self user] login]; - if ([s length] < 10) - return s; + s = [[self user] login]; + if ([s length] < 10) + return s; - // TODO: algorithm might be inappropriate, depends on the actual UID + // TODO: algorithm might be inappropriate, depends on the actual UID - r = [s rangeOfString:@"."]; - if (r.length == 0) - return s; + r = [s rangeOfString:@"."]; + if (r.length == 0) + return s; - return [s substringToIndex:r.location]; + return [s substringToIndex:r.location]; } /* labels */ - (NSString *)labelForKey:(NSString *)_str { - WOResourceManager *rm; - NSArray *languages; - WOContext *ctx; - NSString *label; - NSString *lKey, *lTable, *lVal; - NSRange r; - - if ([_str length] == 0) { - return nil; - } + WOResourceManager *rm; + NSArray *languages; + WOContext *ctx; + NSString *label; + NSString *lKey, *lTable, *lVal; + NSRange r; + + if ([_str length] == 0) { + return nil; + } - /* lookup languages */ + /* lookup languages */ - ctx = [self context]; - languages = [ctx hasSession] - ? [[ctx session] languages] - : [[ctx request] browserLanguages]; + ctx = [self context]; + languages = [ctx hasSession] + ? [[ctx session] languages] + : [[ctx request] browserLanguages]; - /* find resource manager */ + /* find resource manager */ - if ((rm = [self resourceManager]) == nil) - rm = [[WOApplication application] resourceManager]; - if (rm == nil) - [self debugWithFormat:@"WARNING: missing resource manager!"]; + if ((rm = [self resourceManager]) == nil) + rm = [[WOApplication application] resourceManager]; + if (rm == nil) + [self debugWithFormat:@"WARNING: missing resource manager!"]; - /* get parameters */ + /* get parameters */ - r = [_str rangeOfString:@"/"]; - if (r.length > 0) { - lTable = [_str substringToIndex:r.location]; - lKey = [_str substringFromIndex:(r.location + r.length)]; - } - else { - lTable = nil; - lKey = _str; - } - lVal = lKey; + r = [_str rangeOfString:@"/"]; + if (r.length > 0) { + lTable = [_str substringToIndex:r.location]; + lKey = [_str substringFromIndex:(r.location + r.length)]; + } + else { + lTable = nil; + lKey = _str; + } + lVal = lKey; - if([lKey hasPrefix:@"$"]) { - lKey = [self valueForKeyPath:[lKey substringFromIndex:1]]; - } - if([lTable hasPrefix:@"$"]) { - lTable = [self valueForKeyPath:[lTable substringFromIndex:1]]; - } + if([lKey hasPrefix:@"$"]) { + lKey = [self valueForKeyPath:[lKey substringFromIndex:1]]; + } + if([lTable hasPrefix:@"$"]) { + lTable = [self valueForKeyPath:[lTable substringFromIndex:1]]; + } #if 0 - if([lVal hasPrefix:@"$"]) { - lVal = [self valueForKeyPath:[lVal substringFromIndex:1]]; - } + if([lVal hasPrefix:@"$"]) { + lVal = [self valueForKeyPath:[lVal substringFromIndex:1]]; + } #endif - /* lookup string */ + /* lookup string */ - label = [rm stringForKey:lKey inTableNamed:lTable withDefaultValue:lVal - languages:languages]; - return label; + label = [rm stringForKey:lKey inTableNamed:lTable withDefaultValue:lVal + languages:languages]; + return label; } - (NSString *)localizedNameForDayOfWeek:(unsigned)_dayOfWeek { - NSString *key = [dayLabelKeys objectAtIndex:_dayOfWeek % 7]; - return [self labelForKey:key]; + NSString *key = [dayLabelKeys objectAtIndex:_dayOfWeek % 7]; + return [self labelForKey:key]; } - (NSString *)localizedAbbreviatedNameForDayOfWeek:(unsigned)_dayOfWeek { - NSString *key = [abbrDayLabelKeys objectAtIndex:_dayOfWeek % 7]; - return [self labelForKey:key]; + NSString *key = [abbrDayLabelKeys objectAtIndex:_dayOfWeek % 7]; + return [self labelForKey:key]; } - (NSString *)localizedNameForMonthOfYear:(unsigned)_monthOfYear { - NSString *key = [monthLabelKeys objectAtIndex:(_monthOfYear - 1) % 12]; - return [self labelForKey:key]; + NSString *key = [monthLabelKeys objectAtIndex:(_monthOfYear - 1) % 12]; + return [self labelForKey:key]; } - (NSString *)localizedAbbreviatedNameForMonthOfYear:(unsigned)_monthOfYear { - NSString *key = [abbrMonthLabelKeys objectAtIndex:(_monthOfYear - 1) % 12]; - return [self labelForKey:key]; + NSString *key = [abbrMonthLabelKeys objectAtIndex:(_monthOfYear - 1) % 12]; + return [self labelForKey:key]; } /* locale */ - (NSDictionary *)locale { - /* we need no fallback here, as locale is guaranteed to be set by sogod */ - return [[self context] valueForKey:@"locale"]; + /* we need no fallback here, as locale is guaranteed to be set by sogod */ + return [[self context] valueForKey:@"locale"]; } -/* Debugging */ +/* debugging */ - (BOOL)isUIxDebugEnabled { - return uixDebugEnabled; + return uixDebugEnabled; } @end /* UIxComponent */ diff --git a/SOGo/UI/SOGoUI/Version b/SOGo/UI/SOGoUI/Version index c351558f..92c8fa08 100644 --- a/SOGo/UI/SOGoUI/Version +++ b/SOGo/UI/SOGoUI/Version @@ -1,3 +1,3 @@ # $Id$ -SUBMINOR_VERSION:=11 +SUBMINOR_VERSION:=13