33 #include "nsComponentManagerUtils.h"
34 #include "nsServiceManagerUtils.h"
35 #include <nsICategoryManager.h>
37 #include <nsStringAPI.h>
40 #include <nsICryptoHash.h>
42 #include <sbIPropertyManager.h>
43 #include <sbIPropertyInfo.h>
44 #include <sbILocalDatabaseResourcePropertyBag.h>
45 #include <sbILocalDatabaseMediaItem.h>
95 sbIdentityService::~sbIdentityService()
102 sbIdentityService::HashString(
const nsAString &aString,
105 NS_ENSURE_TRUE(!aString.IsEmpty(), NS_ERROR_INVALID_ARG);
108 NS_ConvertUTF16toUTF8(aString).
get());
113 nsCOMPtr<nsICryptoHash>
114 cryptoHash = do_CreateInstance(
"@mozilla.org/security/hash;1", &rv);
115 NS_ENSURE_SUCCESS(rv, rv);
119 rv = cryptoHash->Init(nsICryptoHash::MD5);
120 NS_ENSURE_SUCCESS(rv, rv);
124 toHash = NS_ConvertUTF16toUTF8(aString);
127 rv = cryptoHash->Update
128 (reinterpret_cast<PRUint8 const *>(toHash.BeginReading()),
130 NS_ENSURE_SUCCESS(rv, rv);
133 rv = cryptoHash->Finish(PR_TRUE, hashValue);
134 NS_ENSURE_SUCCESS(rv, rv);
136 _retval.AssignLiteral(hashValue.get());
143 sbIdentityService::GetPropertyStringFor
145 const char *
const * aPropsToHash,
146 PRUint32 aPropsToHashLength,
149 NS_ENSURE_ARG_POINTER(aPropertyBag);
150 NS_ENSURE_ARG_POINTER(aPropsToHash);
154 bool propertyFound =
false;
155 nsAutoString propString;
156 for (PRUint32
i = 0;
i < aPropsToHashLength;
i++) {
160 rv = aPropertyBag->GetProperty(NS_ConvertUTF8toUTF16(aPropsToHash[
i]),
163 if (NS_FAILED(rv) || propVal.IsEmpty()) {
169 propertyFound =
true;
173 propString.Assign(propVal);
177 propString.Append(propVal);
183 _retval.Assign(propString);
186 _retval.SetIsVoid(PR_TRUE);
193 sbIdentityService::GetPropertyStringForAudio
197 NS_ENSURE_ARG_POINTER(aPropertyBag);
199 return GetPropertyStringFor(aPropertyBag,
207 sbIdentityService::GetPropertyStringForVideo
211 NS_ENSURE_ARG_POINTER(aPropertyBag);
213 return GetPropertyStringFor(aPropertyBag,
222 sbIdentityService::CalculateIdentityForMediaItem
226 NS_ENSURE_ARG_POINTER(aMediaItem);
229 nsCOMPtr<sbILocalDatabaseMediaItem> localItem =
230 do_QueryInterface(aMediaItem, &rv);
237 nsCOMPtr<sbILocalDatabaseResourcePropertyBag> propertyBag;
238 rv = localItem->GetPropertyBag(getter_AddRefs(propertyBag));
239 NS_ENSURE_SUCCESS(rv, rv);
241 rv = CalculateIdentityForBag(propertyBag, _retval);
248 sbIdentityService::CalculateIdentityForBag
252 NS_ENSURE_ARG_POINTER(aPropertyBag);
259 if (NS_FAILED(rv) || trackName.IsEmpty()) {
260 trackName.AssignLiteral(
"No Track Name");
263 NS_ConvertUTF16toUTF8(trackName).
get());
267 nsString contentType;
270 NS_ENSURE_SUCCESS(rv, rv);
279 if (contentType.EqualsLiteral(
"video")) {
280 rv = GetPropertyStringForVideo(aPropertyBag, propString);
281 NS_ENSURE_SUCCESS(rv, rv);
283 else if (contentType.EqualsLiteral(
"audio")) {
284 rv = GetPropertyStringForAudio(aPropertyBag, propString);
285 NS_ENSURE_SUCCESS(rv, rv);
290 if (propString.IsEmpty()) {
291 _retval.SetIsVoid(PR_TRUE);
295 rv = HashString(propString, _retval);
296 NS_ENSURE_SUCCESS(rv, rv);
304 sbIdentityService::SaveIdentityToMediaItem
306 const nsAString &aIdentity)
308 NS_ENSURE_ARG_POINTER(aMediaItem);
315 if (NS_FAILED(rv) || trackName.IsEmpty()) {
316 trackName.AssignLiteral(
"No Track Name");
321 NS_ConvertUTF16toUTF8(aIdentity).
get(),
322 NS_ConvertUTF16toUTF8(trackName).
get());
326 rv = aMediaItem->SetProperty
329 NS_ENSURE_SUCCESS(rv, rv);
337 sbIdentityService::SaveIdentityToBag
339 const nsAString &aIdentity)
341 NS_ENSURE_ARG_POINTER(aPropertyBag);
348 if (NS_FAILED(rv) || trackName.IsEmpty()) {
349 trackName.AssignLiteral(
"No Track Name");
354 NS_ConvertUTF16toUTF8(aIdentity).
get(),
355 NS_ConvertUTF16toUTF8(trackName).
get());
359 rv = aPropertyBag->SetProperty
362 NS_ENSURE_SUCCESS(rv, rv);
#define SB_PRLOG_SETUP(x)
static const char *const sAudioPropsToHash[]
#define SB_PROPERTY_METADATA_HASH_IDENTITY
A service to provide identifiers for mediaitems.
#define SB_PROPERTY_GENRE
#define SB_PROPERTY_CONTENTTYPE
#define TRACE_FUNCTION(...)
#define SB_PROPERTY_ARTISTNAME
[USER CODE SHOULD NOT REFERENCE THIS CLASS]
#define SB_PROPERTY_ALBUMNAME
NS_IMPL_THREADSAFE_ISUPPORTS1(sbIdentityService, sbIIdentityService) static const char SEPARATOR[]
#define SB_PROPERTY_TRACKNAME
static const char *const sVideoPropsToHash[]
_getSelectedPageStyle s i