12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #import "Sound.h"
- @interface PlayDelegate : CallbackDelegate <NSSoundDelegate> {
- }
- @property (nonatomic, weak) Sound *sound;
- - (id) initWithContext:(JSContextRef)aContext
- forCallback:(WebScriptObject*)aCallback
- withSound:(Sound*)aSound;
- @end
- @implementation PlayDelegate
- @synthesize sound;
- - (id) initWithContext:(JSContextRef)aContext
- forCallback:(WebScriptObject*)aCallback
- withSound:(Sound*)aSound
- {
- self = [super initWithContext:aContext forCallback:aCallback];
- if (!self)
- return nil;
- sound = aSound;
- return self;
- }
- - (void)sound:(NSSound *)aSound didFinishPlaying:(BOOL)finishedPlaying {
- [self callWithParams:[aSound name], nil];
- [sound.pending removeObject:self];
- }
- @end
- @implementation Sound
- @synthesize pending;
- - (id) initWithContext:(JSContextRef)aContext {
- self = [super initWithContext:aContext];
- if (!self) {
- return nil;
- }
-
- pending = [NSMutableSet new];
- return self;
- }
- - (void) playSound:(NSSound*)sound onComplete:(WebScriptObject*)callback {
- if (callback != (id)[WebUndefined undefined]) {
- PlayDelegate *d = [[PlayDelegate alloc] initWithContext:context
- forCallback:callback
- withSound:self];
- [pending addObject:d];
- [sound setDelegate:d];
- }
- [sound play];
- }
- - (void) play:(NSString*)file onComplete:(WebScriptObject*)callback {
- NSURL* fileUrl = [NSURL fileURLWithPath:[[Utils sharedInstance] pathForResource:file]];
- DebugNSLog(@"Sound file:%@", [fileUrl description]);
-
- NSSound* sound = [[NSSound alloc] initWithContentsOfURL:fileUrl byReference:YES];
- [self playSound:sound onComplete:callback];
- }
- - (void) playSystem:(NSString*)name onComplete:(WebScriptObject*)callback {
- NSSound *systemSound = [NSSound soundNamed:name];
- [self playSound:systemSound onComplete:callback];
- }
- #pragma mark WebScripting Protocol
- + (BOOL) isSelectorExcludedFromWebScript:(SEL)selector {
- return [self webScriptNameForSelector:selector] == nil;
- }
- + (BOOL) isKeyExcludedFromWebScript:(const char*)name {
- return YES;
- }
- + (NSString*) webScriptNameForSelector:(SEL)selector {
- id result = nil;
- if (selector == @selector(play:onComplete:)) {
- result = @"play";
- }
- else if (selector == @selector(playSystem:onComplete:)) {
- result = @"playSystem";
- }
- return result;
- }
- @end
|