void ITunesController::iTunesCallback(CFNotificationCenterRef,void* observer,CFStringRef,const void*, CFDictionaryRef info) { Tune tune; ITunesController* controller = (ITunesController*) observer; CFStringRef cf_state = (CFStringRef) CFDictionaryGetValue(info, CFSTR("Player State")); if (CFStringCompare(cf_state,CFSTR("Paused"),0) == kCFCompareEqualTo) { //qDebug() << "itunesplayer.cpp: Paused"; emit controller->stopped(); } else if (CFStringCompare(cf_state,CFSTR("Stopped"),0) == kCFCompareEqualTo) { //qDebug() << "itunesplayer.cpp: Stopped"; emit controller->stopped(); } else if (CFStringCompare(cf_state,CFSTR("Playing"),0) == kCFCompareEqualTo) { //qDebug() << "itunesplayer.cpp: Playing"; tune.setArtist(CFStringToQString((CFStringRef) CFDictionaryGetValue(info, CFSTR("Artist")))); tune.setName(CFStringToQString((CFStringRef) CFDictionaryGetValue(info, CFSTR("Name")))); tune.setAlbum(CFStringToQString((CFStringRef) CFDictionaryGetValue(info, CFSTR("Album")))); CFNumberRef cf_track = (CFNumberRef) CFDictionaryGetValue(info, CFSTR("Track Number")); if (cf_track) { int tracknr; if (!CFNumberGetValue(cf_track,kCFNumberIntType,&tracknr)) { qWarning("itunesplayer.cpp: Number value conversion failed."); } tune.setTrack(QString::number(tracknr)); } CFNumberRef cf_time = (CFNumberRef) CFDictionaryGetValue(info, CFSTR("Total Time")); int time = 0; if (cf_time && !CFNumberGetValue(cf_time,kCFNumberIntType,&time)) { qWarning("itunesplayer.cpp: Number value conversion failed."); } tune.setTime((unsigned int) (time / 1000)); controller->currentTune_ = tune; emit controller->playing(tune); } else { qWarning("itunesplayer.cpp: Unknown state."); } }
QDir lastfm::dir::bundle() { // Trolltech provided example CFURLRef appUrlRef = CFBundleCopyBundleURL( CFBundleGetMainBundle() ); CFStringRef macPath = CFURLCopyFileSystemPath( appUrlRef, kCFURLPOSIXPathStyle ); QString path = CFStringToQString( macPath ); CFRelease(appUrlRef); CFRelease(macPath); return QDir( path ); }
// static bool Sandbox::createSecurityToken(const QString& canonicalPath, bool isDirectory) { if (sDebug) { qDebug() << "createSecurityToken" << canonicalPath << isDirectory; } if (!enabled()) { return false; } QMutexLocker locker(&s_mutex); if (s_pSandboxPermissions == NULL) { return false; } #ifdef Q_OS_MAC #if __MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 CFURLRef url = CFURLCreateWithFileSystemPath( kCFAllocatorDefault, QStringToCFString(canonicalPath), kCFURLPOSIXPathStyle, isDirectory); if (url) { CFErrorRef error = NULL; CFDataRef bookmark = CFURLCreateBookmarkData( kCFAllocatorDefault, url, kCFURLBookmarkCreationWithSecurityScope, nil, nil, &error); CFRelease(url); if (bookmark) { QByteArray bookmarkBA = QByteArray( reinterpret_cast<const char*>(CFDataGetBytePtr(bookmark)), CFDataGetLength(bookmark)); QString bookmarkBase64 = QString(bookmarkBA.toBase64()); s_pSandboxPermissions->set(keyForCanonicalPath(canonicalPath), bookmarkBase64); CFRelease(bookmark); return true; } else { if (sDebug) { qDebug() << "Failed to create security-scoped bookmark for" << canonicalPath; if (error != NULL) { qDebug() << "Error:" << CFStringToQString(CFErrorCopyDescription(error)); } } } } else { if (sDebug) { qDebug() << "Failed to create security-scoped bookmark URL for" << canonicalPath; } } #endif #endif return false; }
SecurityTokenPointer Sandbox::openTokenFromBookmark(const QString& canonicalPath, const QString& bookmarkBase64) { #ifdef Q_OS_MAC #if __MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 QByteArray bookmarkBA = QByteArray::fromBase64(bookmarkBase64.toLatin1()); if (!bookmarkBA.isEmpty()) { CFDataRef bookmarkData = CFDataCreate( kCFAllocatorDefault, reinterpret_cast<const UInt8*>(bookmarkBA.constData()), bookmarkBA.length()); Boolean stale; CFErrorRef error = NULL; CFURLRef url = CFURLCreateByResolvingBookmarkData( kCFAllocatorDefault, bookmarkData, kCFURLBookmarkResolutionWithSecurityScope, NULL, NULL, &stale, &error); if (error != NULL) { if (sDebug) { qDebug() << "Error creating URL from bookmark data:" << CFStringToQString(CFErrorCopyDescription(error)); } } CFRelease(bookmarkData); if (url != NULL) { if (!CFURLStartAccessingSecurityScopedResource(url)) { if (sDebug) { qDebug() << "CFURLStartAccessingSecurityScopedResource failed for" << canonicalPath; } } else { SecurityTokenPointer pToken = SecurityTokenPointer( new SandboxSecurityToken(canonicalPath, url)); s_activeTokens[canonicalPath] = pToken; return pToken; } } else { if (sDebug) { qDebug() << "Cannot resolve security-scoped bookmark for" << canonicalPath; } } } #endif #else Q_UNUSED(canonicalPath); Q_UNUSED(bookmarkBase64); #endif return SecurityTokenPointer(); }