nsresult sbPlayQueueExternalLibraryListener::GenerateUpdates( sbIMediaItem* aMediaItem, sbIPropertyArray* aProperties, Updates& updates) { TRACE(("%s[%p]", __FUNCTION__, this)); nsresult rv; nsCOMPtr<sbILibrary> lib; rv = aMediaItem->GetLibrary(getter_AddRefs(lib)); NS_ENSURE_SUCCESS(rv, rv); // This ensures that we have an item that is either in our master library or // is duplicated in the master library. nsCOMPtr<sbIMediaItem> internalMediaItem; if (lib == mMasterLibrary) { internalMediaItem = aMediaItem; } else { rv = mMasterLibrary->GetDuplicate(aMediaItem, getter_AddRefs(internalMediaItem)); NS_ENSURE_SUCCESS(rv, rv); if (internalMediaItem) { sbPropertyUpdate internalUpdate(internalMediaItem, aProperties); updates.push_back(internalUpdate); } else { // If we can't find a duplicate in our master library, just return. return NS_OK; } } // We found an item in our master library - go find duplicates in our external // libraries to update. for (PRInt32 i = 0; i < mExternalLibraries.Count(); i++) { if (mExternalLibraries[i] != lib) { nsCOMPtr<sbIMediaItem> externalMediaItem; rv = mExternalLibraries[i]->GetDuplicate(internalMediaItem, getter_AddRefs(externalMediaItem)); if (NS_SUCCEEDED(rv) && externalMediaItem) { sbPropertyUpdate externalUpdate(externalMediaItem, aProperties); updates.push_back(externalUpdate); } } } return NS_OK; }
void pushUpdate(const DataPackage& p) { NodeMap::iterator f = nodeMap.find(p.node.get()); if(f != nodeMap.end()) { *f->second = p; } else { updates.push_back(p); Updates::iterator& last = nodeMap[p.node.get()] = updates.end(); --last; } }