Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
157 lines (130 sloc) 6.45 KB
/*
* Media remote framework header.
*
* Copyright (c) 2013-2014 Cykey (David Murray)
* All rights reserved.
*/
#ifndef MEDIAREMOTE_H_
#define MEDIAREMOTE_H_
#include <CoreFoundation/CoreFoundation.h>
#if __cplusplus
extern "C" {
#endif
#pragma mark - Notifications
/*
* These are used on the local notification center.
*/
extern CFStringRef kMRMediaRemoteNowPlayingInfoDidChangeNotification;
extern CFStringRef kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification;
extern CFStringRef kMRMediaRemotePickableRoutesDidChangeNotification;
extern CFStringRef kMRMediaRemoteNowPlayingApplicationDidChangeNotification;
extern CFStringRef kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification;
extern CFStringRef kMRMediaRemoteRouteStatusDidChangeNotification;
#pragma mark - Keys
extern CFStringRef kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey;
extern CFStringRef kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey;
extern CFStringRef kMRMediaRemoteNowPlayingInfoAlbum;
extern CFStringRef kMRMediaRemoteNowPlayingInfoArtist;
extern CFStringRef kMRMediaRemoteNowPlayingInfoArtworkData;
extern CFStringRef kMRMediaRemoteNowPlayingInfoArtworkMIMEType;
extern CFStringRef kMRMediaRemoteNowPlayingInfoChapterNumber;
extern CFStringRef kMRMediaRemoteNowPlayingInfoComposer;
extern CFStringRef kMRMediaRemoteNowPlayingInfoDuration;
extern CFStringRef kMRMediaRemoteNowPlayingInfoElapsedTime;
extern CFStringRef kMRMediaRemoteNowPlayingInfoGenre;
extern CFStringRef kMRMediaRemoteNowPlayingInfoIsAdvertisement;
extern CFStringRef kMRMediaRemoteNowPlayingInfoIsBanned;
extern CFStringRef kMRMediaRemoteNowPlayingInfoIsInWishList;
extern CFStringRef kMRMediaRemoteNowPlayingInfoIsLiked;
extern CFStringRef kMRMediaRemoteNowPlayingInfoIsMusicApp;
extern CFStringRef kMRMediaRemoteNowPlayingInfoPlaybackRate;
extern CFStringRef kMRMediaRemoteNowPlayingInfoProhibitsSkip;
extern CFStringRef kMRMediaRemoteNowPlayingInfoQueueIndex;
extern CFStringRef kMRMediaRemoteNowPlayingInfoRadioStationIdentifier;
extern CFStringRef kMRMediaRemoteNowPlayingInfoRepeatMode;
extern CFStringRef kMRMediaRemoteNowPlayingInfoShuffleMode;
extern CFStringRef kMRMediaRemoteNowPlayingInfoStartTime;
extern CFStringRef kMRMediaRemoteNowPlayingInfoSupportsFastForward15Seconds;
extern CFStringRef kMRMediaRemoteNowPlayingInfoSupportsIsBanned;
extern CFStringRef kMRMediaRemoteNowPlayingInfoSupportsIsLiked;
extern CFStringRef kMRMediaRemoteNowPlayingInfoSupportsRewind15Seconds;
extern CFStringRef kMRMediaRemoteNowPlayingInfoTimestamp;
extern CFStringRef kMRMediaRemoteNowPlayingInfoTitle;
extern CFStringRef kMRMediaRemoteNowPlayingInfoTotalChapterCount;
extern CFStringRef kMRMediaRemoteNowPlayingInfoTotalDiscCount;
extern CFStringRef kMRMediaRemoteNowPlayingInfoTotalQueueCount;
extern CFStringRef kMRMediaRemoteNowPlayingInfoTotalTrackCount;
extern CFStringRef kMRMediaRemoteNowPlayingInfoTrackNumber;
extern CFStringRef kMRMediaRemoteNowPlayingInfoUniqueIdentifier;
extern CFStringRef kMRMediaRemoteNowPlayingInfoRadioStationIdentifier;
extern CFStringRef kMRMediaRemoteNowPlayingInfoRadioStationHash;
extern CFStringRef kMRMediaRemoteOptionMediaType;
extern CFStringRef kMRMediaRemoteOptionSourceID;
extern CFStringRef kMRMediaRemoteOptionTrackID;
extern CFStringRef kMRMediaRemoteOptionStationID;
extern CFStringRef kMRMediaRemoteOptionStationHash;
extern CFStringRef kMRMediaRemoteRouteDescriptionUserInfoKey;
extern CFStringRef kMRMediaRemoteRouteStatusUserInfoKey;
#pragma mark - API
typedef enum {
/*
* Use nil for userInfo.
*/
kMRPlay = 0,
kMRPause = 1,
kMRTogglePlayPause = 2,
kMRStop = 3,
kMRNextTrack = 4,
kMRPreviousTrack = 5,
kMRToggleShuffle = 6,
kMRToggleRepeat = 7,
kMRStartForwardSeek = 8,
kMREndForwardSeek = 9,
kMRStartBackwardSeek = 10,
kMREndBackwardSeek = 11,
kMRGoBackFifteenSeconds = 12,
kMRSkipFifteenSeconds = 13,
/*
* Use a NSDictionary for userInfo, which contains three keys:
* kMRMediaRemoteOptionTrackID
* kMRMediaRemoteOptionStationID
* kMRMediaRemoteOptionStationHash
*/
kMRLikeTrack = 0x6A,
kMRBanTrack = 0x6B,
kMRAddTrackToWishList = 0x6C,
kMRRemoveTrackFromWishList = 0x6D
} MRCommand;
Boolean MRMediaRemoteSendCommand(MRCommand command, id userInfo);
void MRMediaRemoteSetPlaybackSpeed(int speed);
void MRMediaRemoteSetElapsedTime(double elapsedTime);
void MRMediaRemoteSetNowPlayingApplicationOverrideEnabled(Boolean enabled);
void MRMediaRemoteRegisterForNowPlayingNotifications(dispatch_queue_t queue);
void MRMediaRemoteUnregisterForNowPlayingNotifications();
void MRMediaRemoteBeginRouteDiscovery();
void MRMediaRemoteEndRouteDiscovery();
CFArrayRef MRMediaRemoteCopyPickableRoutes();
typedef void (^MRMediaRemoteGetNowPlayingInfoCompletion)(CFDictionaryRef information);
typedef void (^MRMediaRemoteGetNowPlayingApplicationPIDCompletion)(int PID);
typedef void (^MRMediaRemoteGetNowPlayingApplicationIsPlayingCompletion)(Boolean isPlaying);
void MRMediaRemoteGetNowPlayingApplicationPID(dispatch_queue_t queue, MRMediaRemoteGetNowPlayingApplicationPIDCompletion completion);
void MRMediaRemoteGetNowPlayingInfo(dispatch_queue_t queue, MRMediaRemoteGetNowPlayingInfoCompletion completion);
void MRMediaRemoteGetNowPlayingApplicationIsPlaying(dispatch_queue_t queue, MRMediaRemoteGetNowPlayingApplicationIsPlayingCompletion completion);
void MRMediaRemoteKeepAlive();
void MRMediaRemoteSetElapsedTime(double time);
void MRMediaRemoteSetShuffleMode(int mode);
void MRMediaRemoteSetRepeatMode(int mode);
/*
* The identifier can be obtained using MRMediaRemoteCopyPickableRoutes.
* Use the 'RouteUID' or the 'RouteName' key.
*/
int MRMediaRemoteSelectSourceWithID(CFStringRef identifier);
void MRMediaRemoteSetPickedRouteWithPassword(CFStringRef route, CFStringRef password);
CFArrayRef MRMediaRemoteCopyPickableRoutesForCategory(NSString *category);
Boolean MRMediaRemotePickedRouteHasVolumeControl();
void MRMediaRemoteSetCanBeNowPlayingApplication(Boolean can);
void MRMediaRemoteSetNowPlayingInfo(CFDictionaryRef information);
#if __cplusplus
}
#endif
#endif /* MEDIAREMOTE_H_ */