INT_PTR CMsnProto::SetCurrentMedia(WPARAM, LPARAM lParam) { // Clear old info mir_free(msnCurrentMedia.ptszArtist); mir_free(msnCurrentMedia.ptszAlbum); mir_free(msnCurrentMedia.ptszTitle); mir_free(msnCurrentMedia.ptszTrack); mir_free(msnCurrentMedia.ptszYear); mir_free(msnCurrentMedia.ptszGenre); mir_free(msnCurrentMedia.ptszLength); mir_free(msnCurrentMedia.ptszPlayer); mir_free(msnCurrentMedia.ptszType); memset(&msnCurrentMedia, 0, sizeof(msnCurrentMedia)); // Copy new info LISTENINGTOINFO *cm = (LISTENINGTOINFO *)lParam; if (cm != NULL && cm->cbSize == sizeof(LISTENINGTOINFO) && (cm->ptszArtist != NULL || cm->ptszTitle != NULL)) { bool unicode = (cm->dwFlags & LTI_UNICODE) != 0; msnCurrentMedia.cbSize = sizeof(msnCurrentMedia); // Marks that there is info set msnCurrentMedia.dwFlags = LTI_TCHAR; overrideStr(msnCurrentMedia.ptszType, cm->ptszType, unicode, _T("Music")); overrideStr(msnCurrentMedia.ptszArtist, cm->ptszArtist, unicode); overrideStr(msnCurrentMedia.ptszAlbum, cm->ptszAlbum, unicode); overrideStr(msnCurrentMedia.ptszTitle, cm->ptszTitle, unicode, _T("No Title")); overrideStr(msnCurrentMedia.ptszTrack, cm->ptszTrack, unicode); overrideStr(msnCurrentMedia.ptszYear, cm->ptszYear, unicode); overrideStr(msnCurrentMedia.ptszGenre, cm->ptszGenre, unicode); overrideStr(msnCurrentMedia.ptszLength, cm->ptszLength, unicode); overrideStr(msnCurrentMedia.ptszPlayer, cm->ptszPlayer, unicode); } // Set user text if (msnCurrentMedia.cbSize == 0) delSetting("ListeningTo"); else { TCHAR *text; if (ServiceExists(MS_LISTENINGTO_GETPARSEDTEXT)) text = (TCHAR *)CallService(MS_LISTENINGTO_GETPARSEDTEXT, (WPARAM)_T("%title% - %artist%"), (LPARAM)&msnCurrentMedia); else { text = (TCHAR *)mir_alloc(128 * sizeof(TCHAR)); mir_sntprintf(text, 128, _T("%s - %s"), (msnCurrentMedia.ptszTitle ? msnCurrentMedia.ptszTitle : _T("")), (msnCurrentMedia.ptszArtist ? msnCurrentMedia.ptszArtist : _T(""))); } setTString("ListeningTo", text); mir_free(text); } // Send it char** msgptr = GetStatusMsgLoc(m_iDesiredStatus); MSN_SendStatusMessage(msgptr ? *msgptr : NULL); return 0; }
void CHttpCacheManager::ApplyCacheOverridesL(CRepository& aRepository, const TUint32& aSecIdInt, TBool& aCacheEnabled, TInt& aCacheSize, TBool& aOpCacheEnabled, TBool& aVssCacheEnabled, TDes& aPath, const TDesC& aDefaultDrive) { TDriveUnit drive(aDefaultDrive); // set defaults if(aSecIdInt == KUIDBROWSERNG) // for the browser, force use of Operator and VSS caches { aOpCacheEnabled = ETrue; aVssCacheEnabled = ETrue; } // read override string from centrep HBufC16 *overrideBuf = HBufC16::NewLC(64); TPtr overrideStr(overrideBuf->Des()); TInt strLen; TInt err = aRepository.Get(KCacheManagerHttpCacheProcessOverride, overrideStr, strLen); if(strLen > overrideBuf->Length()) { overrideBuf = overrideBuf->ReAllocL(strLen); // make sure cleanup stack contains correct pointer since ReAllocL always allocates a new des for larger space. CleanupStack::Pop(); CleanupStack::PushL(overrideBuf); // reassign the TPtr overrideStr.Set(overrideBuf->Des()); // pull in the whole string aRepository.Get(KCacheManagerHttpCacheProcessOverride, overrideStr, strLen); } // if we failed to load an override string, use the default. if( overrideStr.Length() == 0 ) { CleanupStack::PopAndDestroy( overrideBuf ); overrideBuf = KDefaultOverrideString().AllocLC(); overrideStr.Set( overrideBuf->Des() ); } // Built in Lex likes white space to separate strings, but easier to enter with ; separators. Replace all ; with spaces. TInt pos=0; do{ if(overrideStr[pos] == ';') { overrideStr[pos] = ' '; } pos++; }while(pos < overrideStr.Length()); TLex overrideLex(overrideStr); do{ TUint32 tempId; User::LeaveIfError(overrideLex.BoundedVal(tempId,EHex,KMaxTUint32)); if(overrideLex.TokenLength() != 8) // if we're not pointing at an SID in the string, we are incorrect and the override is broken. User::Leave(KErrCorrupt); overrideLex.SkipSpace(); TInt32 tempCacheEnabled; User::LeaveIfError(overrideLex.BoundedVal(tempCacheEnabled,KMaxTInt32)); overrideLex.SkipSpace(); TInt32 tempCacheSize; User::LeaveIfError(overrideLex.BoundedVal(tempCacheSize,KMaxTInt32)); overrideLex.SkipSpace(); TDriveUnit tempDrive(overrideLex.NextToken()); overrideLex.SkipSpaceAndMark(); // found a hex SID matching ours, use the parameters. if(tempId == aSecIdInt) { aCacheEnabled = tempCacheEnabled; aCacheSize = tempCacheSize * 1024; // conf is in KB drive = tempDrive; break; } }while(!overrideLex.Eos()); // Modify drive letter on aPath to match TParsePtr parsePath(aPath); TPtrC pathStr(parsePath.Path()); TPath tempPath; tempPath.Format(_L("%c:%S"), TInt(drive)+'A', &pathStr); aPath.Copy(tempPath); HttpCacheUtil::EnsureTrailingSlash( aPath ); CleanupStack::PopAndDestroy(overrideBuf); }