diff --git a/SoObjects/Mailer/GNUmakefile b/SoObjects/Mailer/GNUmakefile index eb7df2a86..d96f672af 100644 --- a/SoObjects/Mailer/GNUmakefile +++ b/SoObjects/Mailer/GNUmakefile @@ -16,6 +16,7 @@ Mailer_OBJC_FILES += \ SOGoMailAccounts.m \ SOGoMailAccount.m \ SOGoMailFolder.m \ + SOGoMailLabel.m \ SOGoMailNamespace.m \ SOGoMailObject.m \ SOGoMailObject+Draft.m \ diff --git a/SoObjects/Mailer/SOGoMailLabel.h b/SoObjects/Mailer/SOGoMailLabel.h new file mode 100644 index 000000000..54bd2496a --- /dev/null +++ b/SoObjects/Mailer/SOGoMailLabel.h @@ -0,0 +1,50 @@ +/* + Copyright (C) 2013 Inverse inc. + + This file is part of SOGo. + + SOGo 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. + + SOGo 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. +*/ + +#ifndef SOGOMAILLABEL_H +#define SOGOMAILLABEL_H + +#import +#import + +#import "../../UI/SOGoUI/UIxComponent.h"; + +@interface SOGoMailLabel : NSObject +{ + NSString *_name; + NSString *_label; + NSString *_color; +} + +- (id) initWithName: (NSString *) theName + label: (NSString *) theLabel + color: (NSString *) theColor; + +- (NSString *) name; +- (NSString *) label; +- (NSString *) color; + ++ (NSArray *) labelsFromDefaults: (NSDictionary *) theDefaults + component: (UIxComponent *) theComponent; + +@end + +#endif // SOGOMAILLABEL_H diff --git a/SoObjects/Mailer/SOGoMailLabel.m b/SoObjects/Mailer/SOGoMailLabel.m new file mode 100644 index 000000000..413684985 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailLabel.m @@ -0,0 +1,96 @@ +/* + Copyright (C) 2007-2013 Inverse inc. + + This file is part of SOGo. + + SOGo 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. + + SOGo 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. +*/ + +#import "SOGoMailLabel.h" + +#import + +@implementation SOGoMailLabel + +- (id) initWithName: (NSString *) theName + label: (NSString *) theLabel + color: (NSString *) theColor +{ + self = [super init]; + + if (self) + { + ASSIGN(_name, theName); + ASSIGN(_label, theLabel); + ASSIGN(_color, theColor); + } + return self; +} + +- (void) dealloc +{ + RELEASE(_name); + RELEASE(_label); + RELEASE(_color); + [super dealloc]; +} + +- (NSString *) name +{ + return _name; +} + +- (NSString *) label +{ + return _label; +} + +- (NSString *) color +{ + return _color; +} + + ++ (NSArray *) labelsFromDefaults: (NSDictionary *) theDefaults + component: (UIxComponent *) theComponent +{ + NSMutableArray *allLabels, *allKeys; + NSDictionary *mailLabelsColors; + NSString *key, *name; + SOGoMailLabel *label; + NSArray *values; + int i; + + allLabels = [NSMutableArray array]; + allKeys = [[theDefaults allKeys] sortedArrayUsingSelector: @selector (caseInsensitiveCompare:)]; + + for (i = 0; i < [allKeys count]; i++) + { + key = [allKeys objectAtIndex: i]; + values = [theDefaults objectForKey: key]; + name = [theComponent labelForKey: [values objectAtIndex: 0]]; + + label = [[self alloc] initWithName: key + label: name + color: [values objectAtIndex: 1]]; + [allLabels addObject: label]; + RELEASE(label); + } + + return allLabels; +} + +@end diff --git a/SoObjects/SOGo/SOGoDefaults.plist b/SoObjects/SOGo/SOGoDefaults.plist index bb68c62d7..926b20997 100644 --- a/SoObjects/SOGo/SOGoDefaults.plist +++ b/SoObjects/SOGo/SOGoDefaults.plist @@ -76,4 +76,12 @@ SOGoRemindWithASound = YES; SOGoSearchMinimumWordLength = 2; + + SOGoMailLabelsColors = { + label1 = ("Important", "#f00"); + label2 = ("Work", "#ff9a00"); + label3 = ("Personal", "#009a00"); + label4 = ("To Do", "#3130ff"); + label5 = ("Later", "#9c309c"); + }; } diff --git a/SoObjects/SOGo/SOGoUserDefaults.h b/SoObjects/SOGo/SOGoUserDefaults.h index 0a6cdb818..3fdaf0306 100644 --- a/SoObjects/SOGo/SOGoUserDefaults.h +++ b/SoObjects/SOGo/SOGoUserDefaults.h @@ -1,8 +1,6 @@ /* SOGoUserDefaults.h - this file is part of SOGo * - * Copyright (C) 2011-2012 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2011-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -166,6 +164,9 @@ extern NSString *SOGoWeekStartFirstFullWeek; - (void) setForwardOptions: (NSDictionary *) newValue; - (NSDictionary *) forwardOptions; +- (void) setMailLabelsColors: (NSDictionary *) newValues; +- (NSDictionary *) mailLabelsColors; + /* calendar */ - (void) setCalendarCategories: (NSArray *) newValues; - (NSArray *) calendarCategories; diff --git a/SoObjects/SOGo/SOGoUserDefaults.m b/SoObjects/SOGo/SOGoUserDefaults.m index bba384f43..b9ce65232 100644 --- a/SoObjects/SOGo/SOGoUserDefaults.m +++ b/SoObjects/SOGo/SOGoUserDefaults.m @@ -1,8 +1,6 @@ /* SOGoUserDefaults.m - this file is part of SOGo * - * Copyright (C) 2009-2012 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2009-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -733,6 +731,26 @@ NSString *SOGoWeekStartFirstFullWeek = @"FirstFullWeek"; return [self boolForKey: @"SOGoRemindWithASound"]; } +// +// Dictionary of arrays. Example: +// +// { +// label1 => ("Important", "#FF0000"); +// label2 => ("Work" "#00FF00"); +// foo_bar => ("Foo Bar", "#0000FF"); +// } +// +- (void) setMailLabelsColors: (NSDictionary *) newValues +{ + [self setObject: newValues forKey: @"SOGoMailLabelsColors"]; +} + +- (NSDictionary *) mailLabelsColors +{ + return [self objectForKey: @"SOGoMailLabelsColors"]; +} + + - (void) setSieveFilters: (NSArray *) newValue { [self setObject: newValue forKey: @"SOGoSieveFilters"]; diff --git a/UI/MailerUI/UIxMailActions.h b/UI/MailerUI/UIxMailActions.h index cdbea6305..80292b24a 100644 --- a/UI/MailerUI/UIxMailActions.h +++ b/UI/MailerUI/UIxMailActions.h @@ -1,8 +1,6 @@ /* UIxMailActions.h - this file is part of SOGo * - * Copyright (C) 2007 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2007-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/UI/MailerUI/UIxMailActions.m b/UI/MailerUI/UIxMailActions.m index 652ffd7ee..c32a4f80c 100644 --- a/UI/MailerUI/UIxMailActions.m +++ b/UI/MailerUI/UIxMailActions.m @@ -1,8 +1,6 @@ /* UIxMailActions.m - this file is part of SOGo * - * Copyright (C) 2007 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2007-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,6 +19,7 @@ */ #import +#import #import #import @@ -32,6 +31,8 @@ #import #import #import +#import + #import "../Common/WODirectAction+SOGo.h" @@ -194,16 +195,18 @@ return response; } -- (WOResponse *) _addLabel: (unsigned int) number +- (WOResponse *) addLabelAction { WOResponse *response; SOGoMailObject *co; NSException *error; NSArray *flags; + NSString *flag; + flag = [[[self->context request] formValueForKey: @"flag"] fromCSSIdentifier]; co = [self clientObject]; - flags = [NSArray arrayWithObject: - [NSString stringWithFormat: @"$Label%u", number]]; + flags = [NSArray arrayWithObject: flag]; + error = [co addFlags: flags]; if (error) response = (WOResponse *) error; @@ -213,16 +216,18 @@ return response; } -- (WOResponse *) _removeLabel: (unsigned int) number +- (WOResponse *) removeLabelAction { WOResponse *response; SOGoMailObject *co; NSException *error; NSArray *flags; + NSString *flag; + flag = [[[self->context request] formValueForKey: @"flag"] fromCSSIdentifier]; co = [self clientObject]; - flags = [NSArray arrayWithObject: - [NSString stringWithFormat: @"$Label%u", number]]; + flags = [NSArray arrayWithObject: flag]; + error = [co removeFlags: flags]; if (error) response = (WOResponse *) error; @@ -232,66 +237,25 @@ return response; } -- (WOResponse *) addLabel1Action -{ - return [self _addLabel: 1]; -} - -- (WOResponse *) addLabel2Action -{ - return [self _addLabel: 2]; -} - -- (WOResponse *) addLabel3Action -{ - return [self _addLabel: 3]; -} - -- (WOResponse *) addLabel4Action -{ - return [self _addLabel: 4]; -} - -- (WOResponse *) addLabel5Action -{ - return [self _addLabel: 5]; -} - -- (WOResponse *) removeLabel1Action -{ - return [self _removeLabel: 1]; -} - -- (WOResponse *) removeLabel2Action -{ - return [self _removeLabel: 2]; -} - -- (WOResponse *) removeLabel3Action -{ - return [self _removeLabel: 3]; -} - -- (WOResponse *) removeLabel4Action -{ - return [self _removeLabel: 4]; -} - -- (WOResponse *) removeLabel5Action -{ - return [self _removeLabel: 5]; -} - - (WOResponse *) removeAllLabelsAction { + NSMutableArray *flags; WOResponse *response; SOGoMailObject *co; NSException *error; - NSArray *flags; + NSDictionary *v; + co = [self clientObject]; - flags = [NSArray arrayWithObjects: @"$Label1", @"$Label2", @"$Label3", - @"$Label4", @"$Label5", nil]; + + v = [[[context activeUser] userDefaults] mailLabelsColors]; + + // We always unconditionally remove the Mozilla tags + flags = [NSMutableArray arrayWithObjects: @"$Label1", @"$Label2", @"$Label3", + @"$Label4", @"$Label5", nil]; + + [flags addObjectsFromArray: [v allKeys]]; + error = [co removeFlags: flags]; if (error) response = (WOResponse *) error; diff --git a/UI/MailerUI/UIxMailListActions.m b/UI/MailerUI/UIxMailListActions.m index e766321e9..90acfd53e 100644 --- a/UI/MailerUI/UIxMailListActions.m +++ b/UI/MailerUI/UIxMailListActions.m @@ -1,6 +1,6 @@ /* Copyright (C) 2004-2005 SKYRIX Software AG - Copyright (C) 2006-2011 Inverse inc. + Copyright (C) 2006-2013 Inverse inc. This file is part of SOGo @@ -861,8 +861,9 @@ flags = [[message objectForKey: @"flags"] objectEnumerator]; while ((currentFlag = [flags nextObject])) - if ([currentFlag hasPrefix: @"$label"]) - [labels addObject: [currentFlag substringFromIndex: 1]]; + { + [labels addObject: currentFlag]; + } return [labels componentsJoinedByString: @" "]; } diff --git a/UI/MailerUI/UIxMailMainFrame.h b/UI/MailerUI/UIxMailMainFrame.h index a7d5ecf49..b51116dc2 100644 --- a/UI/MailerUI/UIxMailMainFrame.h +++ b/UI/MailerUI/UIxMailMainFrame.h @@ -1,8 +1,6 @@ /* UIxMailMainFrame.h - this file is part of SOGo * - * Copyright (C) 2006-2011 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2006-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,6 +23,8 @@ #import "../SOGoUI/UIxComponent.h" +@class SOGoMailLabel; + @interface UIxMailMainFrame : UIxComponent { SOGoUserSettings *us; @@ -33,6 +33,7 @@ NSArray *columnsOrder; int folderType; NSDictionary *currentColumn; + SOGoMailLabel *_currentLabel; } - (WOResponse *) getFoldersStateAction; diff --git a/UI/MailerUI/UIxMailMainFrame.m b/UI/MailerUI/UIxMailMainFrame.m index a5a88c27b..dd8aca949 100644 --- a/UI/MailerUI/UIxMailMainFrame.m +++ b/UI/MailerUI/UIxMailMainFrame.m @@ -1,9 +1,5 @@ /* - Copyright (C) 2007-2011 Inverse inc. - Copyright (C) 2004-2005 SKYRIX Software AG - - Author: Wolfgang Sourdeau - Ludovic Marcotte + Copyright (C) 2007-2013 Inverse inc. This file is part of SOGo. @@ -48,6 +44,7 @@ #import #import #import +#import #import #import #import @@ -84,6 +81,12 @@ return self; } +- (void) dealloc +{ + RELEASE(_currentLabel); + [super dealloc]; +} + - (void) _setupContext { SOGoUser *activeUser; @@ -687,4 +690,32 @@ return [folders jsonRepresentation]; } +// +// Standard mapping done by Thunderbird: +// +// label1 => Important +// label2 => Work +// label3 => Personal +// label4 => To Do +// label5 => Later +// +- (NSArray *) availableLabels +{ + NSDictionary *v; + + v = [[[context activeUser] userDefaults] mailLabelsColors]; + + return [SOGoMailLabel labelsFromDefaults: v component: self]; +} + +- (void) setCurrentLabel: (SOGoMailLabel *) theCurrentLabel +{ + ASSIGN(_currentLabel, theCurrentLabel); +} + +- (SOGoMailLabel *) currentLabel +{ + return _currentLabel; +} + @end /* UIxMailMainFrame */ diff --git a/UI/MailerUI/product.plist b/UI/MailerUI/product.plist index 60d726ba0..8b9ed30cb 100644 --- a/UI/MailerUI/product.plist +++ b/UI/MailerUI/product.plist @@ -272,55 +272,15 @@ actionClass = "UIxMailActions"; actionName = "markMessageRead"; }; - addLabel1 = { + addLabel = { protectedBy = "View"; actionClass = "UIxMailActions"; - actionName = "addLabel1"; + actionName = "addLabel"; }; - addLabel2 = { + removeLabel = { protectedBy = "View"; actionClass = "UIxMailActions"; - actionName = "addLabel2"; - }; - addLabel3 = { - protectedBy = "View"; - actionClass = "UIxMailActions"; - actionName = "addLabel3"; - }; - addLabel4 = { - protectedBy = "View"; - actionClass = "UIxMailActions"; - actionName = "addLabel4"; - }; - addLabel5 = { - protectedBy = "View"; - actionClass = "UIxMailActions"; - actionName = "addLabel5"; - }; - removeLabel1 = { - protectedBy = "View"; - actionClass = "UIxMailActions"; - actionName = "removeLabel1"; - }; - removeLabel2 = { - protectedBy = "View"; - actionClass = "UIxMailActions"; - actionName = "removeLabel2"; - }; - removeLabel3 = { - protectedBy = "View"; - actionClass = "UIxMailActions"; - actionName = "removeLabel3"; - }; - removeLabel4 = { - protectedBy = "View"; - actionClass = "UIxMailActions"; - actionName = "removeLabel4"; - }; - removeLabel5 = { - protectedBy = "View"; - actionClass = "UIxMailActions"; - actionName = "removeLabel5"; + actionName = "removeLabel"; }; removeAllLabels = { protectedBy = "View"; diff --git a/UI/PreferencesUI/English.lproj/Localizable.strings b/UI/PreferencesUI/English.lproj/Localizable.strings index 481ecfb7b..d739522c9 100644 --- a/UI/PreferencesUI/English.lproj/Localizable.strings +++ b/UI/PreferencesUI/English.lproj/Localizable.strings @@ -288,12 +288,13 @@ "Flagged" = "Flagged"; "Junk" = "Junk"; "Not Junk" = "Not Junk"; -"Label 1" = "Label 1"; -"Label 2" = "Label 2"; -"Label 3" = "Label 3"; -"Label 4" = "Label 4"; -"Label 5" = "Label 5"; +"Important" = "Important"; +"Work" = "Work"; +"Personal" = "Personal"; +"To Do" = "To Do"; +"Later" = "Later"; +/* Password policy */ "The password was changed successfully." = "The password was changed successfully."; "Password must not be empty." = "Password must not be empty."; "The passwords do not match. Please try again." = "The passwords do not match. Please try again."; @@ -306,4 +307,4 @@ "Unhandled policy error: %{0}" = "Unhandled policy error: %{0}"; "Unhandled error response" = "Unhandled error response"; "Password change is not supported." = "Password change is not supported."; -"Unhandled HTTP error code: %{0}" = "Unhandled HTTP error code: %{0}"; +"Unhandled HTTP error code: %{0}" = "Unhandled HTTP error code: %{0}"; \ No newline at end of file diff --git a/UI/PreferencesUI/UIxFilterEditor.m b/UI/PreferencesUI/UIxFilterEditor.m index 28ce6c231..f6fe59d2b 100644 --- a/UI/PreferencesUI/UIxFilterEditor.m +++ b/UI/PreferencesUI/UIxFilterEditor.m @@ -1,8 +1,6 @@ /* UIxFilterEditor.m - this file is part of SOGo * - * Copyright (C) 2010 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2010-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,20 +24,44 @@ #import #import +#import #import #import +#import #import @interface UIxFilterEditor : UIxComponent { NSString *filterId; + NSDictionary *labels; } @end @implementation UIxFilterEditor +- (id) init +{ + self = [super init]; + + if (self) + { + filterId = nil; + labels = nil; + } + + return self; +} + +- (void) dealloc +{ + RELEASE(filterId); + RELEASE(labels); + [super dealloc]; +} + + /* convert and save */ - (BOOL) _validateFilterId { @@ -80,4 +102,14 @@ return filterId; } +- (NSString *) labels +{ + if (!labels) + { + ASSIGN(labels, [[[context activeUser] userDefaults] mailLabelsColors]); + } + + return [labels jsonRepresentation]; +} + @end diff --git a/UI/PreferencesUI/UIxPreferences.h b/UI/PreferencesUI/UIxPreferences.h index 24a1ea43a..3040e67ae 100644 --- a/UI/PreferencesUI/UIxPreferences.h +++ b/UI/PreferencesUI/UIxPreferences.h @@ -1,8 +1,6 @@ /* UIxPreferences.h - this file is part of SOGo * - * Copyright (C) 2007-2010 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2007-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,23 +25,36 @@ @class NSString; +@class SOGoMailLabel; @class SOGoUser; @interface UIxPreferences : UIxComponent { id item; SOGoUser *user; + + // Calendar categories NSString *category; NSArray *calendarCategories; NSDictionary *calendarCategoriesColors; + NSArray *contactsCategories; NSString *defaultCategoryColor; NSCalendarDate *today; + + // Mail labels/tags + SOGoMailLabel *label; + NSArray *mailLabels; + + // Sieve filtering NSArray *daysOfWeek, *daysBetweenResponsesList; NSArray *sieveFilters; NSMutableDictionary *vacationOptions, *forwardOptions; + BOOL mailCustomFromEnabled; BOOL hasChanged; + + } - (NSString *) userLongDateFormat; diff --git a/UI/PreferencesUI/UIxPreferences.m b/UI/PreferencesUI/UIxPreferences.m index 8d6bcb227..7b082f622 100644 --- a/UI/PreferencesUI/UIxPreferences.m +++ b/UI/PreferencesUI/UIxPreferences.m @@ -1,9 +1,6 @@ /* UIxPreferences.m - this file is part of SOGo * - * Copyright (C) 2007-2011 Inverse inc. - * - * Author: Wolfgang Sourdeau - * Francis Lachapelle + * Copyright (C) 2007-2013 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,6 +28,8 @@ #import #import +#import + #import #import @@ -47,6 +46,7 @@ #import #import #import +#import #import "UIxPreferences.h" @@ -77,6 +77,9 @@ defaultCategoryColor = nil; category = nil; + label = nil; + mailLabels = nil; + ASSIGN (daysOfWeek, [locale objectForKey: NSWeekDayNameArray]); dd = [user domainDefaults]; @@ -120,6 +123,8 @@ [calendarCategoriesColors release]; [defaultCategoryColor release]; [category release]; + [label release]; + [mailLabels release]; [contactsCategories release]; [forwardOptions release]; [daysOfWeek release]; @@ -1175,6 +1180,67 @@ sortedArrayUsingSelector: @selector (localizedCaseInsensitiveCompare:)]; } +- (SOGoMailLabel *) label +{ + return label; +} + +- (void) setLabel: (SOGoMailLabel *) newLabel +{ + ASSIGN(label, newLabel); +} + +- (NSArray *) mailLabelList +{ + if (!mailLabels) + { + NSDictionary *v; + + v = [[[context activeUser] userDefaults] mailLabelsColors]; + ASSIGN(mailLabels, [SOGoMailLabel labelsFromDefaults: v component: self]); + } + + return mailLabels; +} + +- (NSString *) mailLabelsValue +{ + return @""; +} + +- (void) setMailLabelsValue: (NSString *) value +{ + NSMutableDictionary *sanitizedLabels; + NSDictionary *newLabels; + NSArray *allKeys; + NSString *name; + int i; + + newLabels = [value objectFromJSONString]; + if (newLabels && [newLabels isKindOfClass: [NSDictionary class]]) + { + // We encode correctly our keys + sanitizedLabels = [NSMutableDictionary dictionary]; + allKeys = [newLabels allKeys]; + + for (i = 0; i < [allKeys count]; i++) + { + name = [allKeys objectAtIndex: i]; + + if (![name is7bitSafe]) + name = [name stringByEncodingImap4FolderName]; + + name = [name lowercaseString]; + + [sanitizedLabels setObject: [newLabels objectForKey: [allKeys objectAtIndex: i]] + forKey: name]; + } + + [userDefaults setMailLabelsColors: sanitizedLabels]; + } +} + + - (void) setCategory: (NSString *) newCategory { ASSIGN (category, newCategory); diff --git a/UI/Templates/MailerUI/UIxMailMainFrame.wox b/UI/Templates/MailerUI/UIxMailMainFrame.wox index 858156769..16df83d6a 100644 --- a/UI/Templates/MailerUI/UIxMailMainFrame.wox +++ b/UI/Templates/MailerUI/UIxMailMainFrame.wox @@ -16,6 +16,10 @@ var unseenCountFolders = ;