YouView/YouViewSafari/BundleController.m

93 lines
2.8 KiB
Objective-C

//
// BundleController.m
// YouView Safari
//
// Created by Mr. Gecko on 3/1/09.
// Copyright 2009 Mr. Gecko's Media. All rights reserved.
//
#import "BundleController.h"
#import "urlCheck.h"
#import "Safari.h"
@implementation BundleController
static BundleController *sharedController = nil;
+ (BundleController*)sharedController {
@synchronized(self) {
if (sharedController == nil) {
[[self alloc] init];
}
}
return sharedController;
}
+ (id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if (sharedController == nil) {
sharedController = [super allocWithZone:zone];
return sharedController;
}
}
return nil;
}
- (id)copyWithZone:(NSZone *)zone {
return self;
}
- (id)retain {
return self;
}
- (unsigned)retainCount {
return UINT_MAX;
}
- (void)release {
// do nothing
}
- (id)autorelease {
return self;
}
- (id)init {
self = [super init];
if (self != nil) {
// Safari?
if (!([[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.Safari"] || [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"org.webkit.nightly.WebKit"]))
return nil;
// The magic happens here!
// poseAsClass is deprecated, so we should use method_setImplementation
set_webView_resource_willSendRequest_redirectResponse_fromDataSource_dataSource_original(method_setImplementation(class_getInstanceMethod([LoadProgressMonitor class], @selector(webView:resource:willSendRequest:redirectResponse:fromDataSource:)), (IMP)webView_resource_willSendRequest_redirectResponse_fromDataSource_dataSource_override));
}
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(finnishedLaunching) name:NSApplicationDidFinishLaunchingNotification object:nil];
return self;
}
- (void)finnishedLaunching {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// Find the first separator on the Safari menu…
NSMenu *applicationSubmenu = [[[NSApp mainMenu] itemAtIndex:0] submenu];
for (int i=0; i < [applicationSubmenu numberOfItems]; i++) {
if ([[applicationSubmenu itemAtIndex:i] isSeparatorItem]) {
YouViewMenu = [[NSMenuItem alloc] initWithTitle:([defaults boolForKey:@"YVDisabled"] ? @"Enable YouView" : @"Disable YouView") action:@selector(able:) keyEquivalent:@""];
[YouViewMenu setTarget:self];
[applicationSubmenu insertItem:YouViewMenu atIndex:i];
break;
}
}
}
- (IBAction)able:(id)sender {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults boolForKey:@"YVDisabled"]) {
[defaults setBool:NO forKey:@"YVDisabled"];
[YouViewMenu setTitle:@"Disable YouView"];
} else {
[defaults setBool:YES forKey:@"YVDisabled"];
[YouViewMenu setTitle:@"Enable YouView"];
}
}
@end