sbXPCOMUtils.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set sw=2 :miv */
3 /*
4  *=BEGIN SONGBIRD GPL
5  *
6  * This file is part of the Songbird web player.
7  *
8  * Copyright(c) 2005-2010 POTI, Inc.
9  * http://www.songbirdnest.com
10  *
11  * This file may be licensed under the terms of of the
12  * GNU General Public License Version 2 (the ``GPL'').
13  *
14  * Software distributed under the License is distributed
15  * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
16  * express or implied. See the GPL for the specific language
17  * governing rights and limitations.
18  *
19  * You should have received a copy of the GPL along with this
20  * program. If not, go to http://www.gnu.org/licenses/gpl.html
21  * or write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23  *
24  *=END SONGBIRD GPL
25  */
26 
27 #ifndef SB_XPCOM_UTILS_H_
28 #define SB_XPCOM_UTILS_H_
29 
30 //------------------------------------------------------------------------------
31 //------------------------------------------------------------------------------
32 //
33 // Songbird XPCOM utilities defs.
34 //
35 //------------------------------------------------------------------------------
36 //------------------------------------------------------------------------------
37 
43 //------------------------------------------------------------------------------
44 //
45 // Songbird XPCOM utilities imported services.
46 //
47 //------------------------------------------------------------------------------
48 
49 // Mozilla imports.
50 #include <nsICategoryManager.h>
51 #include <nsISupportsPrimitives.h>
52 #include <nsServiceManagerUtils.h>
53 #include <nsStringGlue.h>
54 
55 
56 //------------------------------------------------------------------------------
57 //
58 // Songbird XPCOM utilities services.
59 //
60 //------------------------------------------------------------------------------
61 
70 static inline nsresult
71 SB_GetCategoryEntryValues(const char* aCategory,
72  nsTArray<nsCString>& aEntryValueList)
73 {
74  // Validate arguments.
75  NS_ENSURE_ARG_POINTER(aCategory);
76 
77  // Function variables.
78  nsresult rv;
79 
80  // Get the category manager.
81  nsCOMPtr<nsICategoryManager>
82  categoryManager = do_GetService(NS_CATEGORYMANAGER_CONTRACTID, &rv);
83  NS_ENSURE_SUCCESS(rv, rv);
84 
85  // Get the category entry enumerator.
86  nsCOMPtr<nsISimpleEnumerator> enumerator;
87  rv = categoryManager->EnumerateCategory(aCategory,
88  getter_AddRefs(enumerator));
89  NS_ENSURE_SUCCESS(rv, rv);
90 
91  // Get the value of each entry.
92  PRBool hasMore;
93  rv = enumerator->HasMoreElements(&hasMore);
94  NS_ENSURE_SUCCESS(rv, rv);
95  while (hasMore) {
96  // Get the next entry name.
97  nsCString entryName;
98  nsCOMPtr<nsISupports> entryNameSupports;
99  rv = enumerator->GetNext(getter_AddRefs(entryNameSupports));
100  NS_ENSURE_SUCCESS(rv, rv);
101  nsCOMPtr<nsISupportsCString>
102  entryNameSupportsCString = do_QueryInterface(entryNameSupports, &rv);
103  NS_ENSURE_SUCCESS(rv, rv);
104  rv = entryNameSupportsCString->GetData(entryName);
105  NS_ENSURE_SUCCESS(rv, rv);
106 
107  // Get the entry value.
108  nsCString entryValue;
109  rv = categoryManager->GetCategoryEntry(aCategory,
110  entryName.get(),
111  getter_Copies(entryValue));
112  NS_ENSURE_SUCCESS(rv, rv);
113 
114  // Add the entry value to the value list.
115  nsCString* appendedElement = aEntryValueList.AppendElement(entryValue);
116  NS_ENSURE_TRUE(appendedElement, NS_ERROR_OUT_OF_MEMORY);
117 
118  // Check for more entries.
119  rv = enumerator->HasMoreElements(&hasMore);
120  NS_ENSURE_SUCCESS(rv, rv);
121  }
122 
123  return NS_OK;
124 }
125 
126 
127 #endif // SB_XPCOM_UTILS_H_
128 
return NS_OK
StringArrayEnumerator prototype hasMore
static nsresult SB_GetCategoryEntryValues(const char *aCategory, nsTArray< nsCString > &aEntryValueList)
Definition: sbXPCOMUtils.h:71