sbMediaListDuplicateFilter.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 SBMEDIALISTDUPLICATEFILTER_H_
28 #define SBMEDIALISTDUPLICATEFILTER_H_
29 
30 // Mozilla includes
31 #include <nsAutoLock.h>
32 #include <nsCOMPtr.h>
33 #include <nsHashKeys.h>
34 #include <nsISimpleEnumerator.h>
35 #include <nsTArray.h>
36 #include <nsTHashtable.h>
37 
38 // Songbird includes
39 #include <sbIMediaListDuplicateFilter.h>
40 #include <sbIMediaListListener.h>
41 #include <sbIPropertyArray.h>
42 
43 // forward declarations
44 class sbIMediaItem;
45 
54  public nsISimpleEnumerator,
56 {
57  NS_DECL_ISUPPORTS;
58  NS_DECL_NSISIMPLEENUMERATOR;
59  NS_DECL_SBIMEDIALISTDUPLICATEFILTER;
60  NS_DECL_SBIMEDIALISTENUMERATIONLISTENER;
61 
63  virtual ~sbMediaListDuplicateFilter();
64 private:
68  nsresult SaveItemKeys(sbIMediaItem * aItem);
72  nsresult IsDuplicate(sbIMediaItem * aItem, bool & aIsDuplicate);
76  nsresult Advance();
77 
78  // Monitor for thread-safety
79  PRMonitor* mMonitor;
80 
81  // Have we run enumerate items yet?
82  PRBool mInitialized;
83 
84  // Contains a combination origin ID and URL's
85  nsTHashtable<nsStringHashKey> mKeys;
86 
87  // Prop Keys Length to avoid recalculating the length of the array.
88  PRUint32 mSBPropKeysLength;
89  // List of properties to use in duplicate identification
90  nsTArray<nsString> mSBPropKeys;
91  // List of properties to use when calling GetProperties
92  nsCOMPtr<sbIPropertyArray> mSBPropertyArray;
93  // List of properties for the current item we're processing
94  nsCOMPtr<sbIPropertyArray> mItemProperties;
95 
96  // The enumerate for the source
97  nsCOMPtr<nsISimpleEnumerator> mSource;
98 
99  // The destionation
100  nsCOMPtr<sbIMediaList> mDest;
101 
102  // Current item in the enumeration
103  nsCOMPtr<sbIMediaItem> mCurrentItem;
104 
105  // Total duplicate items found
106  PRUint32 mDuplicateItems;
107 
108  // Total items enumerated
109  PRUint32 mTotalItems;
110 
111  // Indicates whether to remove duplicates from the enumeration
112  PRBool mRemoveDuplicates;
113 };
114 
115 #endif
Interface used to enumerate the items in a media list.
Interface that defines a single item of media in the system.