sbRemoteMediaListBase.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_MEDIALISTBASE_H__
28 #define __SB_REMOTE_MEDIALISTBASE_H__
29 
30 #include "sbRemoteAPI.h"
32 #include <sbILibraryResource.h>
33 #include "sbXPCScriptableStub.h"
34 
35 #include <sbIMediaItem.h>
36 #include <sbIMediaList.h>
37 #include <sbIMediaListListener.h>
38 #include <sbIRemoteMediaList.h>
39 #include <sbISecurityAggregator.h>
40 #include <sbISecurityMixin.h>
41 #include <sbIWrappedMediaList.h>
42 
43 #include <nsIClassInfo.h>
44 #include <nsISimpleEnumerator.h>
45 #include <nsISecurityCheckedComponent.h>
46 #include <nsStringGlue.h>
47 #include <nsCOMPtr.h>
48 
49 #ifdef PR_LOGGING
50 extern PRLogModuleInfo *gRemoteMediaListLog;
51 #endif
52 
53 #define LOG_LIST(args) PR_LOG(gRemoteMediaListLog, PR_LOG_WARN, args)
54 
55 class sbILibrary;
56 class sbIMediaListView;
57 class sbRemotePlayer;
58 
59 // derived classes need to implement nsIClassInfo
61  public nsIClassInfo,
63  public sbISecurityAggregator,
64  public sbIRemoteMediaList,
65  public sbIWrappedMediaList,
66  public sbXPCScriptableStub
67 {
68 public:
70  NS_DECL_SBISECURITYAGGREGATOR
71  NS_DECL_SBIREMOTEMEDIALIST
72 
73  NS_FORWARD_SAFE_SBILIBRARYRESOURCE(mRemLibraryResource)
74  NS_FORWARD_SAFE_SBIMEDIAITEM(mMediaItem)
76  NS_FORWARD_SAFE_NSISECURITYCHECKEDCOMPONENT(mSecurityMixin)
77 
80 
81  // nsIXPCScriptable
82  NS_IMETHOD GetClassName(char **aClassName);
83  NS_IMETHOD GetScriptableFlags(PRUint32 *aScriptableFlags);
84  NS_IMETHOD NewResolve( nsIXPConnectWrappedNative *wrapper,
85  JSContext *cx,
86  JSObject *obj,
87  jsval id,
88  PRUint32 flags,
89  JSObject **objp,
90  PRBool *_retval );
91 
92  // sbIMediaList
93  NS_IMETHOD GetItemByGuid(const nsAString& aGuid, sbIMediaItem** _retval);
94  NS_IMETHOD GetItemByIndex(PRUint32 aIndex, sbIMediaItem** _retval);
95  NS_IMETHOD GetItemCountByProperty(const nsAString & aPropertyID,
96  const nsAString & aPropertyValue,
97  PRUint32 *_retval);
98  NS_IMETHOD GetListContentType(PRUint16 * _retval);
99  NS_IMETHOD EnumerateAllItems(sbIMediaListEnumerationListener *aEnumerationListener,
100  PRUint16 aEnumerationType);
101  NS_IMETHOD EnumerateItemsByProperty(const nsAString& aPropertyID,
102  const nsAString& aPropertyValue,
103  sbIMediaListEnumerationListener* aEnumerationListener,
104  PRUint16 aEnumerationType);
105  NS_IMETHOD IndexOf(sbIMediaItem* aMediaItem,
106  PRUint32 aStartFrom,
107  PRUint32* _retval);
108  NS_IMETHOD LastIndexOf(sbIMediaItem* aMediaItem,
109  PRUint32 aStartFrom,
110  PRUint32* _retval);
111  NS_IMETHOD Contains(sbIMediaItem* aMediaItem, PRBool* _retval);
112  NS_IMETHOD Add(sbIMediaItem* aMediaItem);
113  NS_IMETHOD AddItem(sbIMediaItem * aMediaItem, sbIMediaItem ** aNewItem);
114  NS_IMETHOD AddAll(sbIMediaList *aMediaList);
115  NS_IMETHOD AddSome(nsISimpleEnumerator* aMediaItems);
116  NS_IMETHOD AddMediaItems(nsISimpleEnumerator* aMediaItems, sbIAddMediaItemsListener* aListener, PRBool aAsync);
117  NS_IMETHOD Remove(sbIMediaItem* aMediaItem);
118  NS_IMETHOD GetDistinctValuesForProperty(const nsAString &aPropertyID,
119  nsIStringEnumerator **_retval);
120 
121  // sbIWrappedMediaList
122  virtual already_AddRefed<sbIMediaItem> GetMediaItem();
123  virtual already_AddRefed<sbIMediaList> GetMediaList();
124 
125  sbRemoteMediaListBase(sbRemotePlayer* aRemotePlayer,
126  sbIMediaList* aMediaList,
127  sbIMediaListView* aMediaListView);
128 
129  // implemented in derived classes
130  virtual nsresult Init() = 0;
131 
132 protected:
133  virtual ~sbRemoteMediaListBase();
134 
135  // Helper method to do the throwing for AddHelper
136  static nsresult ThrowJSException( JSContext *cx,
137  const nsACString &aExceptionMsg );
138 
139  static JSBool AddHelper( JSContext *cx,
140  JSObject *obj,
141  uintN argc,
142  jsval *argv,
143  jsval *rval );
144 
145  nsCOMPtr<nsISecurityCheckedComponent> mSecurityMixin;
146 
147  nsRefPtr<sbRemotePlayer> mRemotePlayer;
148  nsCOMPtr<sbIMediaList> mMediaList;
149  nsCOMPtr<sbIMediaListView> mMediaListView;
150  nsCOMPtr<sbIMediaItem> mMediaItem;
151  nsCOMPtr<sbILibrary> mLibrary;
152  nsCOMPtr<sbILibraryResource> mRemLibraryResource;
153 };
154 
156 {
157 public:
159  NS_DECL_SBIMEDIALISTENUMERATIONLISTENER
160 
163 
164 private:
165  nsRefPtr<sbRemotePlayer> mRemotePlayer;
166  nsCOMPtr<sbIMediaListEnumerationListener> mWrapped;
167 };
168 
170 {
171 public:
173  NS_DECL_NSISIMPLEENUMERATOR
174 
176 
177 private:
178  nsCOMPtr<nsISimpleEnumerator> mWrapped;
179 };
180 
181 #endif // __SB_REMOTE_MEDIALISTBASE_H__
182 
sbRemoteMediaListBase(sbRemotePlayer *aRemotePlayer, sbIMediaList *aMediaList, sbIMediaListView *aMediaListView)
virtual nsresult Init()=0
nsCOMPtr< sbIMediaListView > mMediaListView
Interface used to enumerate the items in a media list.
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx, JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
NS_IMETHOD LastIndexOf(sbIMediaItem *aMediaItem, PRUint32 aStartFrom, PRUint32 *_retval)
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx, JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
nsCOMPtr< sbIMediaItem > mMediaItem
NS_IMETHOD GetScriptableFlags(PRUint32 *aScriptableFlags)
sbDeviceFirmwareAutoCheckForUpdate prototype flags
A brief description of the contents of this interface.
nsISecurityCheckedComponent
A distinct view on a given media list.
NS_IMETHOD AddItem(sbIMediaItem *aMediaItem, sbIMediaItem **aNewItem)
NS_IMETHOD GetItemCountByProperty(const nsAString &aPropertyID, const nsAString &aPropertyValue, PRUint32 *_retval)
NS_DECL_ISUPPORTS NS_DECL_NSISIMPLEENUMERATOR sbUnwrappingSimpleEnumerator(nsISimpleEnumerator *aWrapped)
nsCOMPtr< sbILibraryResource > mRemLibraryResource
NS_IMETHOD EnumerateItemsByProperty(const nsAString &aPropertyID, const nsAString &aPropertyValue, sbIMediaListEnumerationListener *aEnumerationListener, PRUint16 aEnumerationType)
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx, JSObject *obj, jsval id, PRUint32 flags, JSObject **objp, PRBool *_retval)
A marker interface for objects that aggregate the security mixin.
nsCOMPtr< sbIMediaList > mMediaList
NS_DECL_ISUPPORTS NS_DECL_SBIMEDIALISTENUMERATIONLISTENER sbMediaListEnumerationListenerWrapper(sbRemotePlayer *aRemotePlayer, sbIMediaListEnumerationListener *aWrapped)
nsCOMPtr< sbILibrary > mLibrary
NS_IMETHOD AddAll(sbIMediaList *aMediaList)
NS_IMETHOD Add(sbIMediaItem *aMediaItem)
Media library abstraction.
Definition: sbILibrary.idl:82
NS_IMETHOD GetItemByGuid(const nsAString &aGuid, sbIMediaItem **_retval)
NS_IMETHOD GetListContentType(PRUint16 *_retval)
NS_IMETHOD GetDistinctValuesForProperty(const nsAString &aPropertyID, nsIStringEnumerator **_retval)
NS_IMETHOD Remove(sbIMediaItem *aMediaItem)
NS_IMETHOD IndexOf(sbIMediaItem *aMediaItem, PRUint32 aStartFrom, PRUint32 *_retval)
NS_IMETHOD AddMediaItems(nsISimpleEnumerator *aMediaItems, sbIAddMediaItemsListener *aListener, PRBool aAsync)
NS_IMETHOD Contains(sbIMediaItem *aMediaItem, PRBool *_retval)
virtual already_AddRefed< sbIMediaList > GetMediaList()
NS_IMETHOD GetClassName(char **aClassName)
virtual already_AddRefed< sbIMediaItem > GetMediaItem()
Interface that defines a single item of media in the system.
#define NS_FORWARD_SAFE_SBIMEDIALIST_SIMPLE_ARGUMENTS(_to)
NS_IMETHOD AddSome(nsISimpleEnumerator *aMediaItems)
NS_IMETHOD EnumerateAllItems(sbIMediaListEnumerationListener *aEnumerationListener, PRUint16 aEnumerationType)
nsCOMPtr< nsISecurityCheckedComponent > mSecurityMixin
nsRefPtr< sbRemotePlayer > mRemotePlayer
static JSBool AddHelper(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
An interface to control a media list from remote web pages.
NS_IMETHOD GetItemByIndex(PRUint32 aIndex, sbIMediaItem **_retval)
static nsresult ThrowJSException(JSContext *cx, const nsACString &aExceptionMsg)