sbRemoteAPIUtils.h
Go to the documentation of this file.
1 /*
2 //
3 // BEGIN SONGBIRD GPL
4 //
5 // This file is part of the Songbird web player.
6 //
7 // Copyright(c) 2005-2008 POTI, Inc.
8 // http://songbirdnest.com
9 //
10 // This file may be licensed under the terms of of the
11 // GNU General Public License Version 2 (the "GPL").
12 //
13 // Software distributed under the License is distributed
14 // on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
15 // express or implied. See the GPL for the specific language
16 // governing rights and limitations.
17 //
18 // You should have received a copy of the GPL along with this
19 // program. If not, go to http://www.gnu.org/licenses/gpl.html
20 // or write to the Free Software Foundation, Inc.,
21 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 //
23 // END SONGBIRD GPL
24 //
25  */
26 
27 #ifndef __SB_REMOTE_API_UTILS_H__
28 #define __SB_REMOTE_API_UTILS_H__
29 
30 #include <sbILibrary.h>
31 #include <sbILibraryResource.h>
32 #include <sbIMediaItem.h>
33 #include <sbIMediaList.h>
34 #include <sbIMediaListView.h>
35 #include <sbIRemoteMediaList.h>
36 
37 #include "sbRemoteLibraryBase.h"
38 #include "sbRemoteMediaItem.h"
39 #include "sbRemoteMediaList.h"
40 #include "sbRemoteSiteMediaItem.h"
41 #include "sbRemoteSiteMediaList.h"
42 #include "sbRemoteWebMediaItem.h"
43 #include "sbRemoteWebMediaList.h"
44 #include "sbRemotePlayer.h"
45 
46 // Figures out if the media item passed in is from the named
47 // library by comparing the GUIDs from the item and the named library
48 static nsresult
50  const nsAString &aLibName,
51  PRBool *aIsFromLib )
52 {
53  NS_ENSURE_ARG_POINTER(aMediaItem);
54  NS_ENSURE_ARG_POINTER(aIsFromLib);
55 
56  nsCOMPtr<sbILibrary> library;
57  nsresult rv = aMediaItem->GetLibrary( getter_AddRefs(library) );
58  NS_ENSURE_SUCCESS( rv, rv );
59 
60  // Get the guid from the library
61  nsCOMPtr<sbILibraryResource> res( do_QueryInterface( library, &rv ) );
62  NS_ENSURE_SUCCESS( rv, rv );
63  nsAutoString guid;
64  rv = res->GetGuid(guid);
65  NS_ENSURE_SUCCESS( rv, rv );
66 
67  // Get the guids for the default libs
68  nsAutoString libGuid;
69  rv = sbRemoteLibraryBase::GetLibraryGUID( aLibName, libGuid );
70  NS_ENSURE_SUCCESS( rv, rv );
71 
72  if ( guid == libGuid )
73  *aIsFromLib = PR_TRUE;
74  else
75  *aIsFromLib = PR_FALSE;
76 
77  return NS_OK;
78 }
79 
80 // given an existing list, create a view and hand back
81 // the wrapped list
82 static nsresult
84  sbIMediaList *aMediaList,
85  sbIMediaList **aRemoteMediaList )
86 {
87  NS_ENSURE_ARG_POINTER(aRemotePlayer);
88  NS_ENSURE_ARG_POINTER(aMediaList);
89  NS_ENSURE_ARG_POINTER(aRemoteMediaList);
90 
91  nsresult rv;
92 
93  // Create the view for the list
94  nsCOMPtr<sbIMediaListView> mediaListView;
95  rv = aMediaList->CreateView( nsnull, getter_AddRefs(mediaListView) );
96  NS_ENSURE_SUCCESS(rv, rv);
97 
98  // Find out if this is a default or site library
99  PRBool isMain;
100  nsCOMPtr<sbIMediaItem> item( do_QueryInterface( aMediaList, &rv ) );
101  NS_ENSURE_SUCCESS( rv, rv );
102  rv = SB_IsFromLibName( item, NS_LITERAL_STRING("main"), &isMain );
103  NS_ENSURE_SUCCESS( rv, rv );
104  PRBool isWeb;
105  rv = SB_IsFromLibName( item, NS_LITERAL_STRING("web"), &isWeb );
106  NS_ENSURE_SUCCESS( rv, rv );
107 
108  nsRefPtr<sbRemoteMediaList> remoteMediaList;
109  if (isMain) {
110  remoteMediaList = new sbRemoteMediaList( aRemotePlayer,
111  aMediaList,
112  mediaListView );
113  } else if (isWeb) {
114  remoteMediaList = new sbRemoteWebMediaList( aRemotePlayer,
115  aMediaList,
116  mediaListView );
117  } else {
118  remoteMediaList = new sbRemoteSiteMediaList( aRemotePlayer,
119  aMediaList,
120  mediaListView );
121  }
122  NS_ENSURE_TRUE( remoteMediaList, NS_ERROR_OUT_OF_MEMORY );
123  rv = remoteMediaList->Init();
124  NS_ENSURE_SUCCESS( rv, rv );
125 
126  rv = CallQueryInterface( remoteMediaList.get(), aRemoteMediaList );
127  NS_ENSURE_SUCCESS( rv, rv );
128 
129  return NS_OK;
130 }
131 
132 // given an existing item, create either a wrapped list
133 // or wrapped item, handing it back as an item
134 static inline nsresult
136  sbIMediaItem *aMediaItem,
137  sbIMediaItem **aRemoteMediaItem )
138 {
139  NS_ENSURE_ARG_POINTER(aRemotePlayer);
140  NS_ENSURE_ARG_POINTER(aMediaItem);
141  NS_ENSURE_ARG_POINTER(aRemoteMediaItem);
142 
143  nsresult rv;
144 
145  nsCOMPtr<sbIMediaList> mediaList = do_QueryInterface( aMediaItem, &rv );
146  if ( NS_SUCCEEDED(rv) ) {
147 
148  nsCOMPtr<sbIMediaList> remoteMediaList;
149  rv = SB_WrapMediaList( aRemotePlayer,
150  mediaList,
151  getter_AddRefs(remoteMediaList) );
152  NS_ENSURE_SUCCESS( rv, rv );
153 
154  rv = CallQueryInterface( remoteMediaList.get(), aRemoteMediaItem );
155  NS_ENSURE_SUCCESS( rv, rv );
156  }
157  else {
158  // Find out if this is a default or site library
159  PRBool isMain;
160  rv = SB_IsFromLibName( aMediaItem, NS_LITERAL_STRING("main"), &isMain );
161  NS_ENSURE_SUCCESS( rv, rv );
162  PRBool isWeb;
163  rv = SB_IsFromLibName( aMediaItem, NS_LITERAL_STRING("web"), &isWeb );
164  NS_ENSURE_SUCCESS( rv, rv );
165 
166  nsRefPtr<sbRemoteMediaItem> remoteMediaItem;
167  if (isMain) {
168  remoteMediaItem = new sbRemoteMediaItem( aRemotePlayer, aMediaItem );
169  } else if (isWeb) {
170  remoteMediaItem = new sbRemoteWebMediaItem( aRemotePlayer, aMediaItem );
171  } else {
172  remoteMediaItem = new sbRemoteSiteMediaItem( aRemotePlayer, aMediaItem );
173  }
174  NS_ENSURE_TRUE( remoteMediaItem, NS_ERROR_OUT_OF_MEMORY );
175  rv = remoteMediaItem->Init();
176  NS_ENSURE_SUCCESS( rv, rv );
177 
178  rv = CallQueryInterface( remoteMediaItem.get(), aRemoteMediaItem );
179  NS_ENSURE_SUCCESS( rv, rv );
180  }
181 
182  return NS_OK;
183 }
184 
185 // given an existing list, create a view and hand back a wrapped
186 // list. This is merely just a wrapper around the other method to QI
187 // to a sbIRemoteMediaList
188 static inline nsresult
190  sbIMediaList *aMediaList,
191  sbIRemoteMediaList **aRemoteMediaList )
192 {
193  NS_ENSURE_ARG_POINTER(aRemotePlayer);
194  NS_ENSURE_ARG_POINTER(aMediaList);
195  NS_ENSURE_ARG_POINTER(aRemoteMediaList);
196 
197  nsCOMPtr<sbIMediaList> mediaList;
198  nsresult rv = SB_WrapMediaList( aRemotePlayer,
199  aMediaList,
200  getter_AddRefs(mediaList) );
201  NS_ENSURE_SUCCESS( rv, rv );
202 
203  nsCOMPtr<sbIRemoteMediaList> remoteMediaList =
204  do_QueryInterface( mediaList, &rv );
205  NS_ENSURE_SUCCESS( rv, rv );
206 
207  rv = CallQueryInterface( remoteMediaList.get(), aRemoteMediaList );
208  NS_ENSURE_SUCCESS( rv, rv );
209 
210  return NS_OK;
211 }
212 
213 // given an existing view, walk back in to the list and
214 // hand back the wrapped list
215 static inline nsresult
217  sbIMediaListView *aMediaListView,
218  sbIRemoteMediaList **aRemoteMediaList )
219 {
220  NS_ENSURE_ARG_POINTER(aRemotePlayer);
221  NS_ENSURE_ARG_POINTER(aMediaListView);
222  NS_ENSURE_ARG_POINTER(aRemoteMediaList);
223 
224  // Get the list from the view passed in
225  nsCOMPtr<sbIMediaList> mediaList;
226  nsresult rv = aMediaListView->GetMediaList( getter_AddRefs(mediaList) );
227  NS_ENSURE_SUCCESS(rv, rv);
228 
229  // Get the library to which the list belongs
230  nsCOMPtr<sbIMediaItem> item( do_QueryInterface( mediaList, &rv ) );
231  NS_ENSURE_SUCCESS( rv, rv );
232 
233  // Find out if this is a default or site library
234  PRBool isMain;
235  rv = SB_IsFromLibName( item, NS_LITERAL_STRING("main"), &isMain );
236  NS_ENSURE_SUCCESS( rv, rv );
237  PRBool isWeb;
238  rv = SB_IsFromLibName( item, NS_LITERAL_STRING("web"), &isWeb );
239  NS_ENSURE_SUCCESS( rv, rv );
240 
241  nsRefPtr<sbRemoteMediaList> remoteMediaList;
242  if (isMain) {
243  remoteMediaList = new sbRemoteMediaList( aRemotePlayer,
244  mediaList,
245  aMediaListView );
246  } else if (isWeb) {
247  remoteMediaList = new sbRemoteWebMediaList( aRemotePlayer,
248  mediaList,
249  aMediaListView );
250  } else {
251  remoteMediaList = new sbRemoteSiteMediaList( aRemotePlayer,
252  mediaList,
253  aMediaListView );
254  }
255  NS_ENSURE_TRUE( remoteMediaList, NS_ERROR_OUT_OF_MEMORY );
256  rv = remoteMediaList->Init();
257  NS_ENSURE_SUCCESS( rv, rv );
258 
259  rv = CallQueryInterface( remoteMediaList.get(), aRemoteMediaList );
260  NS_ENSURE_SUCCESS( rv, rv );
261 
262  return NS_OK;
263 }
264 
265 #endif // __SB_REMOTE_API_H__
static nsresult SB_WrapMediaList(sbRemotePlayer *aRemotePlayer, sbIMediaList *aMediaList, sbIMediaList **aRemoteMediaList)
return NS_OK
A brief description of the contents of this interface.
A distinct view on a given media list.
static nsresult GetLibraryGUID(const nsAString &aLibraryID, nsAString &aLibraryGUID)
static nsresult SB_IsFromLibName(sbIMediaItem *aMediaItem, const nsAString &aLibName, PRBool *aIsFromLib)
static nsresult SB_WrapMediaItem(sbRemotePlayer *aRemotePlayer, sbIMediaItem *aMediaItem, sbIMediaItem **aRemoteMediaItem)
Interface that defines a single item of media in the system.
An interface to control a media list from remote web pages.