]> git.sesse.net Git - vlc/commitdiff
macosx: add support for pausing iTunes when VLC playback starts, and resume iTunes...
authorDavid Fuhrmann <david.fuhrmann@googlemail.com>
Sat, 2 Mar 2013 11:18:28 +0000 (12:18 +0100)
committerDavid Fuhrmann <david.fuhrmann@googlemail.com>
Sat, 2 Mar 2013 22:09:38 +0000 (23:09 +0100)
Tested with iTunes 8 - 11.

configure.ac
modules/gui/macosx/Modules.am
modules/gui/macosx/iTunes.h [new file with mode: 0644]
modules/gui/macosx/intf.h
modules/gui/macosx/intf.m
modules/gui/macosx/macosx.m

index 421ba14e2577436986c626fa4ba7622bd2a2e37a..e35bf2747ad0428406f96b111ec73c7bce683615 100644 (file)
@@ -3674,7 +3674,7 @@ then
   VLC_ADD_OBJCFLAGS([macosx], [-fobjc-exceptions] )
   VLC_ADD_PLUGIN([macosx])
 
-  VLC_ADD_LIBS([macosx], [-Wl,-framework,QTKit -Wl,-framework,IOKit -Wl,-framework,AddressBook -Wl,-framework,WebKit -Wl,-framework,CoreAudio -Wl,-framework,SystemConfiguration])
+  VLC_ADD_LIBS([macosx], [-Wl,-framework,QTKit -Wl,-framework,IOKit -Wl,-framework,AddressBook -Wl,-framework,WebKit -Wl,-framework,CoreAudio -Wl,-framework,SystemConfiguration -Wl,-framework,ScriptingBridge])
 
   if test ! -d ${CONTRIB_DIR}/Sparkle.framework
   then
index 98bf6e6b8f3d0ac563cfe3f99333b6cc326600f7..580798fe216d1d8163971b4a9e56bf04b9e74417 100644 (file)
@@ -83,4 +83,5 @@ SOURCES_macosx = \
        ControlsBar.h \
        VLCVoutWindowController.m \
        VLCVoutWindowController.h \
+       iTunes.h \
        $(NULL)
diff --git a/modules/gui/macosx/iTunes.h b/modules/gui/macosx/iTunes.h
new file mode 100644 (file)
index 0000000..cdae69b
--- /dev/null
@@ -0,0 +1,489 @@
+/*
+ * iTunes.h
+ */
+
+#import <AppKit/AppKit.h>
+#import <ScriptingBridge/ScriptingBridge.h>
+
+
+@class iTunesPrintSettings, iTunesApplication, iTunesItem, iTunesArtwork, iTunesEncoder, iTunesEQPreset, iTunesPlaylist, iTunesAudioCDPlaylist, iTunesLibraryPlaylist, iTunesRadioTunerPlaylist, iTunesSource, iTunesTrack, iTunesAudioCDTrack, iTunesFileTrack, iTunesSharedTrack, iTunesURLTrack, iTunesUserPlaylist, iTunesFolderPlaylist, iTunesVisual, iTunesWindow, iTunesBrowserWindow, iTunesEQWindow, iTunesPlaylistWindow;
+
+enum iTunesEKnd {
+       iTunesEKndTrackListing = 'kTrk' /* a basic listing of tracks within a playlist */,
+       iTunesEKndAlbumListing = 'kAlb' /* a listing of a playlist grouped by album */,
+       iTunesEKndCdInsert = 'kCDi' /* a printout of the playlist for jewel case inserts */
+};
+typedef enum iTunesEKnd iTunesEKnd;
+
+enum iTunesEnum {
+       iTunesEnumStandard = 'lwst' /* Standard PostScript error handling */,
+       iTunesEnumDetailed = 'lwdt' /* print a detailed report of PostScript errors */
+};
+typedef enum iTunesEnum iTunesEnum;
+
+enum iTunesEPlS {
+       iTunesEPlSStopped = 'kPSS',
+       iTunesEPlSPlaying = 'kPSP',
+       iTunesEPlSPaused = 'kPSp',
+       iTunesEPlSFastForwarding = 'kPSF',
+       iTunesEPlSRewinding = 'kPSR'
+};
+typedef enum iTunesEPlS iTunesEPlS;
+
+enum iTunesERpt {
+       iTunesERptOff = 'kRpO',
+       iTunesERptOne = 'kRp1',
+       iTunesERptAll = 'kAll'
+};
+typedef enum iTunesERpt iTunesERpt;
+
+enum iTunesEVSz {
+       iTunesEVSzSmall = 'kVSS',
+       iTunesEVSzMedium = 'kVSM',
+       iTunesEVSzLarge = 'kVSL'
+};
+typedef enum iTunesEVSz iTunesEVSz;
+
+enum iTunesESrc {
+       iTunesESrcLibrary = 'kLib',
+       iTunesESrcIPod = 'kPod',
+       iTunesESrcAudioCD = 'kACD',
+       iTunesESrcMP3CD = 'kMCD',
+       iTunesESrcRadioTuner = 'kTun',
+       iTunesESrcSharedLibrary = 'kShd',
+       iTunesESrcUnknown = 'kUnk'
+};
+typedef enum iTunesESrc iTunesESrc;
+
+enum iTunesESrA {
+       iTunesESrAAlbums = 'kSrL' /* albums only */,
+       iTunesESrAAll = 'kAll' /* all text fields */,
+       iTunesESrAArtists = 'kSrR' /* artists only */,
+       iTunesESrAComposers = 'kSrC' /* composers only */,
+       iTunesESrADisplayed = 'kSrV' /* visible text fields */,
+       iTunesESrASongs = 'kSrS' /* song names only */
+};
+typedef enum iTunesESrA iTunesESrA;
+
+enum iTunesESpK {
+       iTunesESpKNone = 'kNon',
+       iTunesESpKBooks = 'kSpA',
+       iTunesESpKFolder = 'kSpF',
+       iTunesESpKGenius = 'kSpG',
+       iTunesESpKITunesU = 'kSpU',
+       iTunesESpKLibrary = 'kSpL',
+       iTunesESpKMovies = 'kSpI',
+       iTunesESpKMusic = 'kSpZ',
+       iTunesESpKPodcasts = 'kSpP',
+       iTunesESpKPurchasedMusic = 'kSpM',
+       iTunesESpKTVShows = 'kSpT'
+};
+typedef enum iTunesESpK iTunesESpK;
+
+enum iTunesEVdK {
+       iTunesEVdKNone = 'kNon' /* not a video or unknown video kind */,
+       iTunesEVdKMovie = 'kVdM' /* movie track */,
+       iTunesEVdKMusicVideo = 'kVdV' /* music video track */,
+       iTunesEVdKTVShow = 'kVdT' /* TV show track */
+};
+typedef enum iTunesEVdK iTunesEVdK;
+
+enum iTunesERtK {
+       iTunesERtKUser = 'kRtU' /* user-specified rating */,
+       iTunesERtKComputed = 'kRtC' /* iTunes-computed rating */
+};
+typedef enum iTunesERtK iTunesERtK;
+
+
+
+/*
+ * Standard Suite
+ */
+
+@interface iTunesPrintSettings : SBObject
+
+@property (readonly) NSInteger copies;  // the number of copies of a document to be printed
+@property (readonly) BOOL collating;  // Should printed copies be collated?
+@property (readonly) NSInteger startingPage;  // the first page of the document to be printed
+@property (readonly) NSInteger endingPage;  // the last page of the document to be printed
+@property (readonly) NSInteger pagesAcross;  // number of logical pages laid across a physical page
+@property (readonly) NSInteger pagesDown;  // number of logical pages laid out down a physical page
+@property (readonly) iTunesEnum errorHandling;  // how errors are handled
+@property (copy, readonly) NSDate *requestedPrintTime;  // the time at which the desktop printer should print the document
+@property (copy, readonly) NSArray *printerFeatures;  // printer specific options
+@property (copy, readonly) NSString *faxNumber;  // for fax number
+@property (copy, readonly) NSString *targetPrinter;  // for target printer
+
+- (void) printPrintDialog:(BOOL)printDialog withProperties:(iTunesPrintSettings *)withProperties kind:(iTunesEKnd)kind theme:(NSString *)theme;  // Print the specified object(s)
+- (void) close;  // Close an object
+- (void) delete;  // Delete an element from an object
+- (SBObject *) duplicateTo:(SBObject *)to;  // Duplicate one or more object(s)
+- (BOOL) exists;  // Verify if an object exists
+- (void) open;  // open the specified object(s)
+- (void) playOnce:(BOOL)once;  // play the current track or the specified track or file.
+
+@end
+
+
+
+/*
+ * iTunes Suite
+ */
+
+// The application program
+@interface iTunesApplication : SBApplication
+
+- (SBElementArray *) browserWindows;
+- (SBElementArray *) encoders;
+- (SBElementArray *) EQPresets;
+- (SBElementArray *) EQWindows;
+- (SBElementArray *) playlistWindows;
+- (SBElementArray *) sources;
+- (SBElementArray *) visuals;
+- (SBElementArray *) windows;
+
+@property (copy) iTunesEncoder *currentEncoder;  // the currently selected encoder (MP3, AIFF, WAV, etc.)
+@property (copy) iTunesEQPreset *currentEQPreset;  // the currently selected equalizer preset
+@property (copy, readonly) iTunesPlaylist *currentPlaylist;  // the playlist containing the currently targeted track
+@property (copy, readonly) NSString *currentStreamTitle;  // the name of the current song in the playing stream (provided by streaming server)
+@property (copy, readonly) NSString *currentStreamURL;  // the URL of the playing stream or streaming web site (provided by streaming server)
+@property (copy, readonly) iTunesTrack *currentTrack;  // the current targeted track
+@property (copy) iTunesVisual *currentVisual;  //  the currently selected visual plug-in
+@property BOOL EQEnabled;  // is the equalizer enabled?
+@property BOOL fixedIndexing;  // true if all AppleScript track indices should be independent of the play order of the owning playlist.
+@property BOOL frontmost;  // is iTunes the frontmost application?
+@property BOOL fullScreen;  // are visuals displayed using the entire screen?
+@property (copy, readonly) NSString *name;  // the name of the application
+@property BOOL mute;  // has the sound output been muted?
+@property NSInteger playerPosition;  // the player’s position within the currently playing track in seconds.
+@property (readonly) iTunesEPlS playerState;  // is iTunes stopped, paused, or playing?
+@property (copy, readonly) SBObject *selection;  // the selection visible to the user
+@property NSInteger soundVolume;  // the sound output volume (0 = minimum, 100 = maximum)
+@property (copy, readonly) NSString *version;  // the version of iTunes
+@property BOOL visualsEnabled;  // are visuals currently being displayed?
+@property iTunesEVSz visualSize;  // the size of the displayed visual
+
+- (void) printPrintDialog:(BOOL)printDialog withProperties:(iTunesPrintSettings *)withProperties kind:(iTunesEKnd)kind theme:(NSString *)theme;  // Print the specified object(s)
+- (void) run;  // run iTunes
+- (void) quit;  // quit iTunes
+- (iTunesTrack *) add:(NSArray *)x to:(SBObject *)to;  // add one or more files to a playlist
+- (void) backTrack;  // reposition to beginning of current track or go to previous track if already at start of current track
+- (iTunesTrack *) convert:(NSArray *)x;  // convert one or more files or tracks
+- (void) fastForward;  // skip forward in a playing track
+- (void) nextTrack;  // advance to the next track in the current playlist
+- (void) pause;  // pause playback
+- (void) playOnce:(BOOL)once;  // play the current track or the specified track or file.
+- (void) playpause;  // toggle the playing/paused state of the current track
+- (void) previousTrack;  // return to the previous track in the current playlist
+- (void) resume;  // disable fast forward/rewind and resume playback, if playing.
+- (void) rewind;  // skip backwards in a playing track
+- (void) stop;  // stop playback
+- (void) update;  // update the specified iPod
+- (void) eject;  // eject the specified iPod
+- (void) subscribe:(NSString *)x;  // subscribe to a podcast feed
+- (void) updateAllPodcasts;  // update all subscribed podcast feeds
+- (void) updatePodcast;  // update podcast feed
+- (void) openLocation:(NSString *)x;  // Opens a Music Store or audio stream URL
+
+@end
+
+// an item
+@interface iTunesItem : SBObject
+
+@property (copy, readonly) SBObject *container;  // the container of the item
+- (NSInteger) id;  // the id of the item
+@property (readonly) NSInteger index;  // The index of the item in internal application order.
+@property (copy) NSString *name;  // the name of the item
+@property (copy, readonly) NSString *persistentID;  // the id of the item as a hexadecimal string. This id does not change over time.
+
+- (void) printPrintDialog:(BOOL)printDialog withProperties:(iTunesPrintSettings *)withProperties kind:(iTunesEKnd)kind theme:(NSString *)theme;  // Print the specified object(s)
+- (void) close;  // Close an object
+- (void) delete;  // Delete an element from an object
+- (SBObject *) duplicateTo:(SBObject *)to;  // Duplicate one or more object(s)
+- (BOOL) exists;  // Verify if an object exists
+- (void) open;  // open the specified object(s)
+- (void) playOnce:(BOOL)once;  // play the current track or the specified track or file.
+- (void) reveal;  // reveal and select a track or playlist
+
+@end
+
+// a piece of art within a track
+@interface iTunesArtwork : iTunesItem
+
+@property (copy) NSImage *data;  // data for this artwork, in the form of a picture
+@property (copy) NSString *objectDescription;  // description of artwork as a string
+@property (readonly) BOOL downloaded;  // was this artwork downloaded by iTunes?
+@property (copy, readonly) NSNumber *format;  // the data format for this piece of artwork
+@property NSInteger kind;  // kind or purpose of this piece of artwork
+@property (copy) NSData *rawData;  // data for this artwork, in original format
+
+
+@end
+
+// converts a track to a specific file format
+@interface iTunesEncoder : iTunesItem
+
+@property (copy, readonly) NSString *format;  // the data format created by the encoder
+
+
+@end
+
+// equalizer preset configuration
+@interface iTunesEQPreset : iTunesItem
+
+@property double band1;  // the equalizer 32 Hz band level (-12.0 dB to +12.0 dB)
+@property double band2;  // the equalizer 64 Hz band level (-12.0 dB to +12.0 dB)
+@property double band3;  // the equalizer 125 Hz band level (-12.0 dB to +12.0 dB)
+@property double band4;  // the equalizer 250 Hz band level (-12.0 dB to +12.0 dB)
+@property double band5;  // the equalizer 500 Hz band level (-12.0 dB to +12.0 dB)
+@property double band6;  // the equalizer 1 kHz band level (-12.0 dB to +12.0 dB)
+@property double band7;  // the equalizer 2 kHz band level (-12.0 dB to +12.0 dB)
+@property double band8;  // the equalizer 4 kHz band level (-12.0 dB to +12.0 dB)
+@property double band9;  // the equalizer 8 kHz band level (-12.0 dB to +12.0 dB)
+@property double band10;  // the equalizer 16 kHz band level (-12.0 dB to +12.0 dB)
+@property (readonly) BOOL modifiable;  // can this preset be modified?
+@property double preamp;  // the equalizer preamp level (-12.0 dB to +12.0 dB)
+@property BOOL updateTracks;  // should tracks which refer to this preset be updated when the preset is renamed or deleted?
+
+
+@end
+
+// a list of songs/streams
+@interface iTunesPlaylist : iTunesItem
+
+- (SBElementArray *) tracks;
+
+@property (readonly) NSInteger duration;  // the total length of all songs (in seconds)
+@property (copy) NSString *name;  // the name of the playlist
+@property (copy, readonly) iTunesPlaylist *parent;  // folder which contains this playlist (if any)
+@property BOOL shuffle;  // play the songs in this playlist in random order?
+@property (readonly) long long size;  // the total size of all songs (in bytes)
+@property iTunesERpt songRepeat;  // playback repeat mode
+@property (readonly) iTunesESpK specialKind;  // special playlist kind
+@property (copy, readonly) NSString *time;  // the length of all songs in MM:SS format
+@property (readonly) BOOL visible;  // is this playlist visible in the Source list?
+
+- (void) moveTo:(SBObject *)to;  // Move playlist(s) to a new location
+- (iTunesTrack *) searchFor:(NSString *)for_ only:(iTunesESrA)only;  // search a playlist for tracks matching the search string. Identical to entering search text in the Search field in iTunes.
+
+@end
+
+// a playlist representing an audio CD
+@interface iTunesAudioCDPlaylist : iTunesPlaylist
+
+- (SBElementArray *) audioCDTracks;
+
+@property (copy) NSString *artist;  // the artist of the CD
+@property BOOL compilation;  // is this CD a compilation album?
+@property (copy) NSString *composer;  // the composer of the CD
+@property NSInteger discCount;  // the total number of discs in this CD’s album
+@property NSInteger discNumber;  // the index of this CD disc in the source album
+@property (copy) NSString *genre;  // the genre of the CD
+@property NSInteger year;  // the year the album was recorded/released
+
+
+@end
+
+// the master music library playlist
+@interface iTunesLibraryPlaylist : iTunesPlaylist
+
+- (SBElementArray *) fileTracks;
+- (SBElementArray *) URLTracks;
+- (SBElementArray *) sharedTracks;
+
+
+@end
+
+// the radio tuner playlist
+@interface iTunesRadioTunerPlaylist : iTunesPlaylist
+
+- (SBElementArray *) URLTracks;
+
+
+@end
+
+// a music source (music library, CD, device, etc.)
+@interface iTunesSource : iTunesItem
+
+- (SBElementArray *) audioCDPlaylists;
+- (SBElementArray *) libraryPlaylists;
+- (SBElementArray *) playlists;
+- (SBElementArray *) radioTunerPlaylists;
+- (SBElementArray *) userPlaylists;
+
+@property (readonly) long long capacity;  // the total size of the source if it has a fixed size
+@property (readonly) long long freeSpace;  // the free space on the source if it has a fixed size
+@property (readonly) iTunesESrc kind;
+
+- (void) update;  // update the specified iPod
+- (void) eject;  // eject the specified iPod
+
+@end
+
+// playable audio source
+@interface iTunesTrack : iTunesItem
+
+- (SBElementArray *) artworks;
+
+@property (copy) NSString *album;  // the album name of the track
+@property (copy) NSString *albumArtist;  // the album artist of the track
+@property NSInteger albumRating;  // the rating of the album for this track (0 to 100)
+@property (readonly) iTunesERtK albumRatingKind;  // the rating kind of the album rating for this track
+@property (copy) NSString *artist;  // the artist/source of the track
+@property (readonly) NSInteger bitRate;  // the bit rate of the track (in kbps)
+@property double bookmark;  // the bookmark time of the track in seconds
+@property BOOL bookmarkable;  // is the playback position for this track remembered?
+@property NSInteger bpm;  // the tempo of this track in beats per minute
+@property (copy) NSString *category;  // the category of the track
+@property (copy) NSString *comment;  // freeform notes about the track
+@property BOOL compilation;  // is this track from a compilation album?
+@property (copy) NSString *composer;  // the composer of the track
+@property (readonly) NSInteger databaseID;  // the common, unique ID for this track. If two tracks in different playlists have the same database ID, they are sharing the same data.
+@property (copy, readonly) NSDate *dateAdded;  // the date the track was added to the playlist
+@property (copy) NSString *objectDescription;  // the description of the track
+@property NSInteger discCount;  // the total number of discs in the source album
+@property NSInteger discNumber;  // the index of the disc containing this track on the source album
+@property (readonly) double duration;  // the length of the track in seconds
+@property BOOL enabled;  // is this track checked for playback?
+@property (copy) NSString *episodeID;  // the episode ID of the track
+@property NSInteger episodeNumber;  // the episode number of the track
+@property (copy) NSString *EQ;  // the name of the EQ preset of the track
+@property double finish;  // the stop time of the track in seconds
+@property BOOL gapless;  // is this track from a gapless album?
+@property (copy) NSString *genre;  // the music/audio genre (category) of the track
+@property (copy) NSString *grouping;  // the grouping (piece) of the track. Generally used to denote movements within a classical work.
+@property (copy, readonly) NSString *kind;  // a text description of the track
+@property (copy) NSString *longDescription;
+@property (copy) NSString *lyrics;  // the lyrics of the track
+@property (copy, readonly) NSDate *modificationDate;  // the modification date of the content of this track
+@property NSInteger playedCount;  // number of times this track has been played
+@property (copy) NSDate *playedDate;  // the date and time this track was last played
+@property (readonly) BOOL podcast;  // is this track a podcast episode?
+@property NSInteger rating;  // the rating of this track (0 to 100)
+@property (readonly) iTunesERtK ratingKind;  // the rating kind of this track
+@property (copy, readonly) NSDate *releaseDate;  // the release date of this track
+@property (readonly) NSInteger sampleRate;  // the sample rate of the track (in Hz)
+@property NSInteger seasonNumber;  // the season number of the track
+@property BOOL shufflable;  // is this track included when shuffling?
+@property NSInteger skippedCount;  // number of times this track has been skipped
+@property (copy) NSDate *skippedDate;  // the date and time this track was last skipped
+@property (copy) NSString *show;  // the show name of the track
+@property (copy) NSString *sortAlbum;  // override string to use for the track when sorting by album
+@property (copy) NSString *sortArtist;  // override string to use for the track when sorting by artist
+@property (copy) NSString *sortAlbumArtist;  // override string to use for the track when sorting by album artist
+@property (copy) NSString *sortName;  // override string to use for the track when sorting by name
+@property (copy) NSString *sortComposer;  // override string to use for the track when sorting by composer
+@property (copy) NSString *sortShow;  // override string to use for the track when sorting by show name
+@property (readonly) NSInteger size;  // the size of the track (in bytes)
+@property double start;  // the start time of the track in seconds
+@property (copy, readonly) NSString *time;  // the length of the track in MM:SS format
+@property NSInteger trackCount;  // the total number of tracks on the source album
+@property NSInteger trackNumber;  // the index of the track on the source album
+@property BOOL unplayed;  // is this track unplayed?
+@property iTunesEVdK videoKind;  // kind of video track
+@property NSInteger volumeAdjustment;  // relative volume adjustment of the track (-100% to 100%)
+@property NSInteger year;  // the year the track was recorded/released
+
+
+@end
+
+// a track on an audio CD
+@interface iTunesAudioCDTrack : iTunesTrack
+
+@property (copy, readonly) NSURL *location;  // the location of the file represented by this track
+
+
+@end
+
+// a track representing an audio file (MP3, AIFF, etc.)
+@interface iTunesFileTrack : iTunesTrack
+
+@property (copy) NSURL *location;  // the location of the file represented by this track
+
+- (void) refresh;  // update file track information from the current information in the track’s file
+
+@end
+
+// a track residing in a shared library
+@interface iTunesSharedTrack : iTunesTrack
+
+
+@end
+
+// a track representing a network stream
+@interface iTunesURLTrack : iTunesTrack
+
+@property (copy) NSString *address;  // the URL for this track
+
+- (void) download;  // download podcast episode
+
+@end
+
+// custom playlists created by the user
+@interface iTunesUserPlaylist : iTunesPlaylist
+
+- (SBElementArray *) fileTracks;
+- (SBElementArray *) URLTracks;
+- (SBElementArray *) sharedTracks;
+
+@property BOOL shared;  // is this playlist shared?
+@property (readonly) BOOL smart;  // is this a Smart Playlist?
+
+
+@end
+
+// a folder that contains other playlists
+@interface iTunesFolderPlaylist : iTunesUserPlaylist
+
+
+@end
+
+// a visual plug-in
+@interface iTunesVisual : iTunesItem
+
+
+@end
+
+// any window
+@interface iTunesWindow : iTunesItem
+
+@property NSRect bounds;  // the boundary rectangle for the window
+@property (readonly) BOOL closeable;  // does the window have a close box?
+@property (readonly) BOOL collapseable;  // does the window have a collapse (windowshade) box?
+@property BOOL collapsed;  // is the window collapsed?
+@property NSPoint position;  // the upper left position of the window
+@property (readonly) BOOL resizable;  // is the window resizable?
+@property BOOL visible;  // is the window visible?
+@property (readonly) BOOL zoomable;  // is the window zoomable?
+@property BOOL zoomed;  // is the window zoomed?
+
+
+@end
+
+// the main iTunes window
+@interface iTunesBrowserWindow : iTunesWindow
+
+@property BOOL minimized;  // is the small player visible?
+@property (copy, readonly) SBObject *selection;  // the selected songs
+@property (copy) iTunesPlaylist *view;  // the playlist currently displayed in the window
+
+
+@end
+
+// the iTunes equalizer window
+@interface iTunesEQWindow : iTunesWindow
+
+@property BOOL minimized;  // is the small EQ window visible?
+
+
+@end
+
+// a sub-window showing a single playlist
+@interface iTunesPlaylistWindow : iTunesWindow
+
+@property (copy, readonly) SBObject *selection;  // the selected songs
+@property (copy, readonly) iTunesPlaylist *view;  // the playlist displayed in the window
+
+
+@end
+
index f264d20c1e0965d21613278af54192f6d539bb15..224bd5886e39301fb83affb098626d832b0b9884 100644 (file)
@@ -148,6 +148,10 @@ struct intf_sys_t
     IOPMAssertionID userActivityAssertionID;
 
     VLCVoutWindowController *o_vout_controller;
+
+    /* iTunes play/pause support */
+    BOOL b_has_itunes_paused;
+    NSTimer *o_itunes_play_timer;
 }
 
 @property (readonly) VLCVoutWindowController* voutController;
index b65af727043fb89ce5b938c53bd76857861f308e..9b54b6bd6e51b1241de02a8bd875220ac01a2b99 100644 (file)
@@ -71,6 +71,8 @@
 #import <AddressBook/AddressBook.h>         /* for crashlog send mechanism */
 #import <Sparkle/Sparkle.h>                 /* we're the update delegate */
 
+#import "iTunes.h"
+
 /*****************************************************************************
  * Local prototypes.
  *****************************************************************************/
@@ -805,6 +807,8 @@ static VLCMain *_o_sharedMainInstance = nil;
     if (isTerminating)
         return;
 
+    [self resumeItunesPlayback:nil];
+
     if (notification == nil)
         [[NSNotificationCenter defaultCenter] postNotificationName: NSApplicationWillTerminateNotification object: nil];
 
@@ -1352,14 +1356,53 @@ static VLCMain *_o_sharedMainInstance = nil;
     [o_playlist outlineViewSelectionDidChange:nil];
 }
 
+- (void)resumeItunesPlayback:(id)sender
+{
+    if (b_has_itunes_paused && var_InheritInteger(p_intf, "macosx-control-itunes") > 1) {
+        iTunesApplication *iTunesApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
+        if (iTunesApp && [iTunesApp isRunning]) {
+            if ([iTunesApp playerState] == iTunesEPlSPaused) {
+                msg_Dbg(p_intf, "Unpause iTunes...");
+                [iTunesApp playpause];
+            }
+        }
+        
+    }
+
+    b_has_itunes_paused = NO;
+    o_itunes_play_timer = nil;
+}
+
 - (void)playbackStatusUpdated
 {
     int state = -1;
     if (p_current_input) {
         state = var_GetInteger(p_current_input, "state");
     }
-    
+
+    int i_control_itunes = var_InheritInteger(p_intf, "macosx-control-itunes");
+    // cancel itunes timer if next item starts playing
+    if (state > -1 && state != END_S && i_control_itunes > 0) {
+        if (o_itunes_play_timer) {
+            [o_itunes_play_timer invalidate];
+            o_itunes_play_timer = nil;
+        }
+    }
+
     if (state == PLAYING_S) {
+        // pause iTunes
+        if (i_control_itunes > 0 && !b_has_itunes_paused) {
+            iTunesApplication *iTunesApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
+            if (iTunesApp && [iTunesApp isRunning]) {
+                if ([iTunesApp playerState] == iTunesEPlSPlaying) {
+                    msg_Dbg(p_intf, "Pause iTunes...");
+                    [iTunesApp pause];
+                    b_has_itunes_paused = YES;
+                }
+            }
+        }
+
+        
         /* Declare user activity.
          This wakes the display if it is off, and postpones display sleep according to the users system preferences
          Available from 10.7.3 */
@@ -1414,6 +1457,19 @@ static VLCMain *_o_sharedMainInstance = nil;
             msg_Dbg(VLCIntf, "releasing sleep blocker (%i)" , systemSleepAssertionID);
             IOPMAssertionRelease(systemSleepAssertionID);
         }
+
+        if (state == END_S || state == -1) {
+            if (i_control_itunes > 0) {
+                if (o_itunes_play_timer) {
+                    [o_itunes_play_timer invalidate];
+                }
+                o_itunes_play_timer = [NSTimer scheduledTimerWithTimeInterval: 0.5
+                                                                       target: self
+                                                                     selector: @selector(resumeItunesPlayback:)
+                                                                     userInfo: nil
+                                                                      repeats: NO];
+            }
+        }
     }
 
     [[VLCMain sharedInstance] performSelectorOnMainThread:@selector(updateMainWindow) withObject: nil waitUntilDone: NO];
index b4472444163922b8e47217586adef1da7f80b760..a3b6434ff91e10490d007d9f1b2c1cf79b44aa3a 100644 (file)
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * macosx.m: Mac OS X module for vlc
  *****************************************************************************
- * Copyright (C) 2001-2012 VLC authors and VideoLAN
+ * Copyright (C) 2001-2013 VLC authors and VideoLAN
  * $Id$
  *
  * Authors: Colin Delacroix <colin@zoy.org>
@@ -9,6 +9,7 @@
  *          Florian G. Pflug <fgp@phlo.org>
  *          Jon Lech Johansen <jon-vl@nanocrew.net>
  *          Felix Paul Kühne <fkuehne at videolan dot org>
+ *          David Fuhrmann <david dot fuhrmann at googlemail dot com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -119,7 +120,16 @@ void WindowClose  (vout_window_t *);
 #define SIDEBAR_TEXT N_("Show sidebar")
 #define SIDEBAR_LONGTEXT N_("Shows a sidebar in the main window listing media sources")
 
-vlc_module_begin ()
+#define ITUNES_TEXT N_("Pause iTunes during VLC playback")
+#define ITUNES_LONGTEXT N_("Pauses iTunes playback when VLC playback starts. If selected, iTunes playback will be resumed again if VLC playback is finished.")
+
+static const int itunes_list[] =
+    { 0, 1, 2 };
+static const char *const itunes_list_text[] = {
+    N_("Do nothing"), N_("Pause iTunes"), N_("Pause and resume iTunes")
+};
+
+vlc_module_begin()
     set_description(N_("Mac OS X interface"))
     set_capability("interface", 200)
     set_callbacks(OpenIntf, CloseIntf)
@@ -145,8 +155,10 @@ vlc_module_begin ()
     add_bool("macosx-show-playback-buttons", false, JUMPBUTTONS_TEXT, JUMPBUTTONS_LONGTEXT, false)
     add_bool("macosx-show-playmode-buttons", true, PLAYMODEBUTTONS_TEXT, PLAYMODEBUTTONS_LONGTEXT, false)
     add_bool("macosx-show-sidebar", true, SIDEBAR_TEXT, SIDEBAR_LONGTEXT, false)
+    add_integer("macosx-control-itunes", 1, ITUNES_TEXT, ITUNES_LONGTEXT, false)
+    change_integer_list(itunes_list, itunes_list_text)
 
-    add_submodule ()
+    add_submodule()
         set_description("Mac OS X Video Output Provider")
         set_capability("vout window nsobject", 100)
         set_callbacks(WindowOpen, WindowClose)
@@ -154,5 +166,5 @@ vlc_module_begin ()
         add_integer("macosx-vdev", 0, VDEV_TEXT, VDEV_LONGTEXT, false)
         add_float_with_range("macosx-opaqueness", 1, 0, 1, OPAQUENESS_TEXT, OPAQUENESS_LONGTEXT, true);
         add_bool("macosx-black", true, BLACK_TEXT, BLACK_LONGTEXT, false)
-vlc_module_end ()
+vlc_module_end()