#import "MainController.h"
#import "MenuController.h"
#import "PreferencesController.h"
-#import "HotKeyCenter.h"
+#import <ITKit/ITHotKeyCenter.h>
+#import <ITKit/ITHotKey.h>
+#import <ITKit/ITKeyCombo.h>
#import "StatusWindowController.h"
#import "StatusItemHack.h"
- (void)applicationDidFinishLaunching:(NSNotification *)note
{
+ //Turn on debug mode if needed
+ if ([df boolForKey:@"ITDebugMode"]) {
+ SetITDebugMode(YES);
+ }
+
currentRemote = [self loadRemote];
[currentRemote begin];
}
}
- [statusItem setImage:[NSImage imageNamed:@"menu"]];
- [statusItem setAlternateImage:[NSImage imageNamed:@"selected_image"]];
+ [statusItem setImage:[NSImage imageNamed:@"MenuNormal"]];
+ [statusItem setAlternateImage:[NSImage imageNamed:@"MenuInverted"]];
}
- (ITMTRemote *)loadRemote
- (BOOL)songIsPlaying
{
- return ( ! ([[currentRemote currentSongUniqueIdentifier] isEqualToString:@"0-0"]) );
+ return ( ! ([[currentRemote playerStateUniqueIdentifier] isEqualToString:@"0-0"]) );
}
- (BOOL)radioIsPlaying
- (BOOL)songChanged
{
- return ( ! [[currentRemote currentSongUniqueIdentifier] isEqualToString:_latestSongIdentifier] );
+ return ( ! [[currentRemote playerStateUniqueIdentifier] isEqualToString:_latestSongIdentifier] );
}
- (NSString *)latestSongIdentifier
- (void)timerUpdate
{
- if ([self songChanged]) {
- [self setLatestSongIdentifier:[currentRemote currentSongUniqueIdentifier]];
+ //This huge if statement is being nasty
+ /*if ( ( [self songChanged] ) ||
+ ( ([self radioIsPlaying]) && (latestPlaylistClass != ITMTRemotePlayerRadioPlaylist) ) ||
+ ( (! [self radioIsPlaying]) && (latestPlaylistClass == ITMTRemotePlayerRadioPlaylist) ) )*/
+
+ if ( [self songChanged] ) {
+ [self setLatestSongIdentifier:[currentRemote playerStateUniqueIdentifier]];
+ latestPlaylistClass = [currentRemote currentPlaylistClass];
[menuController rebuildSubmenus];
-
+
if ( [df boolForKey:@"showSongInfoOnChange"] ) {
- [self showCurrentTrackInfo];
+// [self performSelector:@selector(showCurrentTrackInfo) withObject:nil afterDelay:0.0];
}
}
}
} else {
[currentRemote play];
}
+
+ [self timerUpdate];
}
- (void)nextSong
{
[currentRemote goToNextSong];
+
+ [self timerUpdate];
}
- (void)prevSong
{
[currentRemote goToPreviousSong];
+
+ [self timerUpdate];
}
- (void)fastForward
{
[currentRemote forward];
+
+ [self timerUpdate];
}
- (void)rewind
{
[currentRemote rewind];
+
+ [self timerUpdate];
}
- (void)selectPlaylistAtIndex:(int)index
{
[currentRemote switchToPlaylistAtIndex:index];
+
+ [self timerUpdate];
}
- (void)selectSongAtIndex:(int)index
{
[currentRemote switchToSongAtIndex:index];
+
+ [self timerUpdate];
}
- (void)selectSongRating:(int)rating
{
[currentRemote setCurrentSongRating:(float)rating / 100.0];
+
+ [self timerUpdate];
}
- (void)selectEQPresetAtIndex:(int)index
{
[currentRemote switchToEQAtIndex:index];
+
+ [self timerUpdate];
}
- (void)showPlayer
- (void)clearHotKeys
{
- [[HotKeyCenter sharedCenter] removeHotKey:@"PlayPause"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"NextTrack"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"PrevTrack"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"TrackInfo"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"ShowPlayer"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"UpcomingSongs"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"ToggleLoop"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"ToggleShuffle"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"IncrementVolume"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"DecrementVolume"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"IncrementRating"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"DecrementRating"];
+ NSEnumerator *hotKeyEnumerator = [[[ITHotKeyCenter sharedCenter] allHotKeys] objectEnumerator];
+ ITHotKey *nextHotKey;
+
+ while ( (nextHotKey = [hotKeyEnumerator nextObject]) ) {
+ [[ITHotKeyCenter sharedCenter] unregisterHotKey:nextHotKey];
+ }
}
- (void)setupHotKeys
{
+ ITHotKey *hotKey;
+
if ([df objectForKey:@"PlayPause"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"PlayPause"
- combo:[df keyComboForKey:@"PlayPause"]
- target:self action:@selector(playPause)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"PlayPause"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"PlayPause"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(playPause)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"NextTrack"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"NextTrack"
- combo:[df keyComboForKey:@"NextTrack"]
- target:self action:@selector(nextSong)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"NextTrack"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"NextTrack"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(nextSong)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"PrevTrack"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"PrevTrack"
- combo:[df keyComboForKey:@"PrevTrack"]
- target:self action:@selector(prevSong)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"PrevTrack"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"PrevTrack"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(prevSong)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"ShowPlayer"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"ShowPlayer"
- combo:[df keyComboForKey:@"ShowPlayer"]
- target:self action:@selector(showPlayer)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"ShowPlayer"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ShowPlayer"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(showPlayer)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"TrackInfo"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"TrackInfo"
- combo:[df keyComboForKey:@"TrackInfo"]
- target:self action:@selector(showCurrentTrackInfo)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"TrackInfo"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"TrackInfo"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(showCurrentTrackInfo)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"UpcomingSongs"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"UpcomingSongs"
- combo:[df keyComboForKey:@"UpcomingSongs"]
- target:self action:@selector(showUpcomingSongs)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"UpcomingSongs"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"UpcomingSongs"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(showUpcomingSongs)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"ToggleLoop"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"ToggleLoop"
- combo:[df keyComboForKey:@"ToggleLoop"]
- target:self action:@selector(toggleLoop)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"ToggleLoop"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ToggleLoop"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(toggleLoop)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"ToggleShuffle"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"ToggleShuffle"
- combo:[df keyComboForKey:@"ToggleShuffle"]
- target:self action:@selector(toggleShuffle)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"ToggleShuffle"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ToggleShuffle"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(toggleShuffle)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"IncrementVolume"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"IncrementVolume"
- combo:[df keyComboForKey:@"IncrementVolume"]
- target:self action:@selector(incrementVolume)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"IncrementVolume"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"IncrementVolume"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(incrementVolume)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"DecrementVolume"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"DecrementVolume"
- combo:[df keyComboForKey:@"DecrementVolume"]
- target:self action:@selector(decrementVolume)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"DecrementVolume"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"DecrementVolume"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(decrementVolume)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"IncrementRating"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"IncrementRating"
- combo:[df keyComboForKey:@"IncrementRating"]
- target:self action:@selector(incrementRating)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"IncrementRating"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"IncrementRating"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(incrementRating)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"DecrementRating"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"DecrementRating"
- combo:[df keyComboForKey:@"DecrementRating"]
- target:self action:@selector(decrementRating)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"DecrementRating"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"DecrementRating"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(decrementRating)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
}
- (void)showCurrentTrackInfo
{
- NSString *title = [currentRemote currentSongTitle];
-
+ ITMTRemotePlayerSource source = [currentRemote currentSource];
+ NSString *title = [currentRemote currentSongTitle];
+ NSString *album = nil;
+ NSString *artist = nil;
+ NSString *time = nil;
+ int trackNumber = 0;
+ int trackTotal = 0;
+ int rating = -1;
+
if ( title ) {
- NSString *album = nil;
- NSString *artist = nil;
- NSString *time = nil;
- int trackNumber = 0;
- int trackTotal = 0;
- int rating = 0;
if ( [df boolForKey:@"showAlbum"] ) {
album = [currentRemote currentSongAlbum];
if ( [df boolForKey:@"showRating"] ) {
rating = ( [currentRemote currentSongRating] * 5 );
}
-
- [statusWindowController showSongWindowWithTitle:title
- album:album
- artist:artist
- time:time
- trackNumber:trackNumber
- trackTotal:trackTotal
- rating:rating];
+
} else {
title = NSLocalizedString(@"noSongPlaying", @"No song is playing.");
- [statusWindowController showSongWindowWithTitle:title
- album:nil
- artist:nil
- time:nil
- trackNumber:0
- trackTotal:0
- rating:0];
}
+
+ [statusWindowController showSongInfoWindowWithSource:source
+ title:title
+ album:album
+ artist:artist
+ time:time
+ trackNumber:trackNumber
+ trackTotal:trackTotal
+ rating:rating];
}
- (void)showUpcomingSongs
}
}
- [statusWindowController showUpcomingSongsWithTitles:songList];
+ [statusWindowController showUpcomingSongsWindowWithTitles:songList];
} else {
- [statusWindowController showUpcomingSongsWithTitles:[NSArray arrayWithObject:NSLocalizedString(@"noUpcomingSongs", @"No upcoming songs.")]];
+ [statusWindowController showUpcomingSongsWindowWithTitles:[NSArray arrayWithObject:NSLocalizedString(@"noUpcomingSongs", @"No upcoming songs.")]];
}
}
- (void)incrementVolume
{
- float volume = [currentRemote volume];
- volume += 0.2;
+ float volume = [currentRemote volume];
+ float dispVol = volume;
+
+ volume += 0.110;
+ dispVol += 0.100;
+
if (volume > 1.0) {
- volume = 1.0;
+ volume = 1.0;
+ dispVol = 1.0;
}
+
[currentRemote setVolume:volume];
-
- //Show volume status window
- [statusWindowController showVolumeWindowWithLevel:volume];
+
+ // Show volume status window
+ [statusWindowController showVolumeWindowWithLevel:dispVol];
}
- (void)decrementVolume
{
- float volume = [currentRemote volume];
- volume -= 0.2;
+ float volume = [currentRemote volume];
+ float dispVol = volume;
+
+ volume -= 0.090;
+ dispVol -= 0.100;
+
if (volume < 0.0) {
- volume = 0.0;
+ volume = 0.0;
+ dispVol = 0.0;
}
+
[currentRemote setVolume:volume];
//Show volume status window
- [statusWindowController showVolumeWindowWithLevel:volume];
+ [statusWindowController showVolumeWindowWithLevel:dispVol];
}
- (void)incrementRating
[currentRemote setCurrentSongRating:rating];
//Show rating status window
- [statusWindowController showRatingWindowWithLevel:rating];
+ [statusWindowController showRatingWindowWithRating:rating];
}
- (void)decrementRating
[currentRemote setCurrentSongRating:rating];
//Show rating status window
- [statusWindowController showRatingWindowWithLevel:rating];
+ [statusWindowController showRatingWindowWithRating:rating];
}
- (void)toggleLoop
{
ITMTRemotePlayerRepeatMode repeatMode = [currentRemote repeatMode];
-
switch (repeatMode) {
case ITMTRemotePlayerRepeatOff:
repeatMode = ITMTRemotePlayerRepeatAll;
[currentRemote setRepeatMode:repeatMode];
//Show loop status window
- [statusWindowController showLoopWindowWithMode:repeatMode];
+ [statusWindowController showRepeatWindowWithMode:repeatMode];
}
- (void)toggleShuffle
bool newShuffleEnabled = ![currentRemote shuffleEnabled];
[currentRemote setShuffleEnabled:newShuffleEnabled];
//Show shuffle status window
- [statusWindowController showLoopWindowWithMode:newShuffleEnabled];
+ [statusWindowController showRepeatWindowWithMode:newShuffleEnabled];
}
/*************************************************************************/