diff --git a/toolkit/components/build/Makefile.in b/toolkit/components/build/Makefile.in index f8c79a23bf6b..2a605d4f2a9a 100644 --- a/toolkit/components/build/Makefile.in +++ b/toolkit/components/build/Makefile.in @@ -159,9 +159,7 @@ EXTRA_DSO_LDOPTS += \ $(NULL) ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) -EXTRA_DSO_LDOPTS += $(TK_LIBS) \ - -framework AddressBook \ - $(NULL) +EXTRA_DSO_LDOPTS += $(TK_LIBS) endif ifeq ($(OS_ARCH),WINNT) diff --git a/toolkit/components/startup/src/Makefile.in b/toolkit/components/startup/src/Makefile.in index dbeb0c1f3a8f..7a4f05876cb9 100644 --- a/toolkit/components/startup/src/Makefile.in +++ b/toolkit/components/startup/src/Makefile.in @@ -74,7 +74,7 @@ ifeq (,$(filter-out WINCE WINNT,$(OS_ARCH))) CPPSRCS += nsUserInfoWin.cpp else ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) -CMMSRCS += nsUserInfoMac.mm +CPPSRCS += nsUserInfoMac.cpp else CPPSRCS += nsUserInfoUnix.cpp endif diff --git a/toolkit/components/startup/src/nsUserInfoMac.cpp b/toolkit/components/startup/src/nsUserInfoMac.cpp new file mode 100644 index 000000000000..2fc15a5ff547 --- /dev/null +++ b/toolkit/components/startup/src/nsUserInfoMac.cpp @@ -0,0 +1,142 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Communicator client code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsUserInfo.h" +#include "nsString.h" +#include "nsReadableUtils.h" + +#include "nsIServiceManager.h" +#include "nsIInternetConfigService.h" + +nsUserInfo::nsUserInfo() +{ +} + +nsUserInfo::~nsUserInfo() +{ +} + +NS_IMPL_ISUPPORTS1(nsUserInfo,nsIUserInfo) + +NS_IMETHODIMP +nsUserInfo::GetFullname(PRUnichar **aFullname) +{ + nsresult result = NS_ERROR_FAILURE; + nsCOMPtr icService (do_GetService(NS_INTERNETCONFIGSERVICE_CONTRACTID)); + if (icService) + { + nsCAutoString cName; + result = icService->GetString(nsIInternetConfigService::eICString_RealName, cName); + if ( NS_SUCCEEDED ( result ) ) + { + nsString fullName; + *aFullname = ToNewUnicode(cName); + } + } + return result; + +} + +NS_IMETHODIMP +nsUserInfo::GetEmailAddress(char * *aEmailAddress) +{ + nsresult result = NS_ERROR_FAILURE; + nsCOMPtr icService (do_GetService(NS_INTERNETCONFIGSERVICE_CONTRACTID)); + if (icService) + { + nsCAutoString tempString; + result = icService->GetString(nsIInternetConfigService::eICString_Email, tempString); + if (NS_SUCCEEDED(result)) + *aEmailAddress = ToNewCString(tempString); + + } + return result; +} + +NS_IMETHODIMP +nsUserInfo::GetUsername(char * *aUsername) +{ + *aUsername = nsnull; + + nsCAutoString tempString; + nsresult rv = NS_ERROR_FAILURE; + nsCOMPtr icService (do_GetService(NS_INTERNETCONFIGSERVICE_CONTRACTID)); + if (icService) + rv = icService->GetString(nsIInternetConfigService::eICString_Email, tempString); + + if ( NS_FAILED( rv ) ) return rv; + + const char* atString = "@"; + PRInt32 atOffset = tempString.Find(atString); + if (atOffset != kNotFound) + tempString.Truncate(atOffset); + + *aUsername = ToNewCString(tempString); + return NS_OK; +} + +NS_IMETHODIMP +nsUserInfo::GetDomain(char * *aDomain) +{ + *aDomain = nsnull; + nsCAutoString tempString; + nsresult rv = NS_ERROR_FAILURE; + nsCOMPtr icService (do_GetService(NS_INTERNETCONFIGSERVICE_CONTRACTID)); + if (icService) + rv = icService->GetString(nsIInternetConfigService::eICString_Email, tempString); + if ( NS_FAILED( rv ) ) return rv; + const char* atString = "@"; + PRInt32 atOffset = tempString.Find(atString); + if (atOffset != kNotFound) + { + nsCAutoString domainString; + tempString.Right(domainString, tempString.Length() - (atOffset + 1)); + *aDomain = ToNewCString(domainString); + return NS_OK; + } + + // no domain in the pref + return NS_ERROR_FAILURE; +} + +#pragma mark - + + + + + + diff --git a/toolkit/components/startup/src/nsUserInfoMac.h b/toolkit/components/startup/src/nsUserInfoMac.h index 1179acfe5f6b..e086caa4daf5 100644 --- a/toolkit/components/startup/src/nsUserInfoMac.h +++ b/toolkit/components/startup/src/nsUserInfoMac.h @@ -39,18 +39,33 @@ #define __nsUserInfoMac_h #include "nsIUserInfo.h" -#include "nsReadableUtils.h" + + +#include class nsUserInfo: public nsIUserInfo + { public: - nsUserInfo(); - virtual ~nsUserInfo() {} + nsUserInfo(void); + virtual ~nsUserInfo(); NS_DECL_ISUPPORTS NS_DECL_NSIUSERINFO + + +protected: + + nsresult EnsureInitted(); + + static OSType GetAppCreatorCode(); + static PRUnichar* PStringToNewUCS2(ConstStr255Param str); + +protected: + + ICInstance mInstance; + PRBool mInitted; - nsresult GetPrimaryEmailAddress(nsCString &aEmailAddress); }; #endif /* __nsUserInfo_h */ diff --git a/toolkit/components/startup/src/nsUserInfoMac.mm b/toolkit/components/startup/src/nsUserInfoMac.mm deleted file mode 100644 index 18a8461bf5f0..000000000000 --- a/toolkit/components/startup/src/nsUserInfoMac.mm +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla toolkit code. - * - * The Initial Developer of the Original Code is HÃ¥kan Waara . - * Portions created by the Initial Developer are Copyright (C) 2008 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - - -#include "nsUserInfoMac.h" -#include "nsObjCExceptions.h" -#include "nsString.h" - -#import -#import - -NS_IMPL_ISUPPORTS1(nsUserInfo, nsIUserInfo) - -nsUserInfo::nsUserInfo() {} - -NS_IMETHODIMP -nsUserInfo::GetFullname(PRUnichar **aFullname) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT - - NS_ConvertUTF8toUTF16 fullName([NSFullUserName() UTF8String]); - *aFullname = ToNewUnicode(fullName); - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT -} - -NS_IMETHODIMP -nsUserInfo::GetUsername(char **aUsername) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT - - nsCAutoString username([NSUserName() UTF8String]); - *aUsername = ToNewCString(username); - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT -} - -nsresult -nsUserInfo::GetPrimaryEmailAddress(nsCString &aEmailAddress) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT - - // Try to get this user's primary email from the system addressbook's "me card" - // (if they've filled it) - ABPerson *me = [[ABAddressBook sharedAddressBook] me]; - ABMultiValue *emailAddresses = [me valueForProperty:kABEmailProperty]; - if ([emailAddresses count] > 0) { - // get the index of the primary email, in case there are more than one - int primaryEmailIndex = [emailAddresses indexForIdentifier:[emailAddresses primaryIdentifier]]; - aEmailAddress.Assign([[emailAddresses valueAtIndex:primaryEmailIndex] UTF8String]); - return NS_OK; - } - - return NS_ERROR_FAILURE; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT -} - -NS_IMETHODIMP -nsUserInfo::GetEmailAddress(char **aEmailAddress) -{ - nsCAutoString email; - if (NS_SUCCEEDED(GetPrimaryEmailAddress(email))) - *aEmailAddress = ToNewCString(email); - return NS_OK; -} - -NS_IMETHODIMP -nsUserInfo::GetDomain(char **aDomain) -{ - nsCAutoString email; - if (NS_SUCCEEDED(GetPrimaryEmailAddress(email))) { - PRInt32 index = email.FindChar('@'); - if (index != -1) { - // chop off everything before, and including the '@' - *aDomain = ToNewCString(Substring(email, index + 1)); - } - } - return NS_OK; -}