diff --git a/SonosKit/SonosController.h b/SonosKit/SonosController.h index 46d3e02..75c52bc 100644 --- a/SonosKit/SonosController.h +++ b/SonosKit/SonosController.h @@ -29,6 +29,10 @@ typedef NS_ENUM(NSInteger, SonosRequestType) { @property (nonatomic, strong) NSString *group; @property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSString *uuid; +@property (nonatomic, strong) NSString *status; +@property (nonatomic, strong) NSString *info; +@property (nonatomic, strong) NSString *currentvolume; + @property (nonatomic, readonly) NSArray *slaves; @property (nonatomic, assign, getter = isCoordinator) BOOL coordinator; @@ -99,4 +103,4 @@ typedef NS_ENUM(NSInteger, SonosRequestType) { - (void)removeSlave:(SonosController *)slave; - (void)removeAllSlaves; -@end \ No newline at end of file +@end diff --git a/SonosKit/SonosController.m b/SonosKit/SonosController.m index f135f2d..03e5204 100644 --- a/SonosKit/SonosController.m +++ b/SonosKit/SonosController.m @@ -115,7 +115,7 @@ - (void)request:(SonosRequestType)type action:(NSString *)action params:(NSDicti if (httpResponse.statusCode != 200) return; NSDictionary *responseDict = [XMLReader dictionaryForXMLData:data options:XMLReaderOptionsProcessNamespaces error:&error]; - NSDictionary *body = responseDict[@"Envelope"][@"Body"]; + NSDictionary *body = responseDict[@"s:Envelope"][@"s:Body"]; dispatch_async(dispatch_get_main_queue(), ^{ if (block) block(body, nil); @@ -173,12 +173,13 @@ - (void)getTransportInfo:(void (^)(BOOL, NSDictionary *, NSError *))block { NSDictionary *params = @{@"InstanceID": @0}; [self request:SonosRequestTypeAVTransport action:@"GetTransportInfo" params:params completion:^(NSDictionary *response, NSError *error) { + if (error) { block(NO, nil, error); return; } - if ([response[@"CurrentTransportState"] isEqualToString:@"PLAYING"]) { + if ([response[@"u:GetTransportInfoResponse"][@"CurrentTransportState"][@"text"] isEqualToString:@"PLAYING"]) { block(YES, response, nil); return; } @@ -306,7 +307,7 @@ - (void)getVolume:(void (^)(NSInteger, NSDictionary *, NSError *))block NSDictionary *params = @{@"InstanceID": @0, @"Channel":@"Master"}; [self request:SonosRequestTypeRenderingControl action:@"GetVolume" params:params completion:^(NSDictionary *response, NSError *error) { if (!error) { - NSInteger volume = [response[@"GetVolumeResponse"][@"CurrentVolume"][@"text"] integerValue]; + NSInteger volume = [response[@"u:GetVolumeResponse"][@"CurrentVolume"][@"text"] integerValue]; block(volume, response, error); return; } @@ -431,7 +432,10 @@ - (instancetype)initWithCoder:(NSCoder *)aDecoder [self setGroup:[aDecoder decodeObjectForKey:@"group"]]; [self setName:[aDecoder decodeObjectForKey:@"name"]]; [self setUuid:[aDecoder decodeObjectForKey:@"uuid"]]; + [self setStatus:[aDecoder decodeObjectForKey:@"status"]]; + [self setInfo:[aDecoder decodeObjectForKey:@"info"]]; [self setCoordinator:[aDecoder decodeBoolForKey:@"coordinator"]]; + [self setCurrentvolume:[aDecoder decodeObjectForKey:@"currentvolume"]]; } return self; } @@ -442,7 +446,10 @@ - (void)encodeWithCoder:(NSCoder *)aCoder [aCoder encodeObject:_group forKey:@"group"]; [aCoder encodeObject:_name forKey:@"name"]; [aCoder encodeObject:_uuid forKey:@"uuid"]; + [aCoder encodeObject:_status forKey:@"status"]; + [aCoder encodeObject:_info forKey:@"info"]; [aCoder encodeBool:_coordinator forKey:@"coordinator"]; + [aCoder encodeObject:_currentvolume forKey:@"currentvolume"]; } -@end \ No newline at end of file +@end diff --git a/SonosKit/SonosControllerStore.h b/SonosKit/SonosControllerStore.h index 5efa6ab..09dcff9 100644 --- a/SonosKit/SonosControllerStore.h +++ b/SonosKit/SonosControllerStore.h @@ -10,8 +10,18 @@ @class SonosController; -@interface SonosControllerStore : NSObject +// Protocol definition starts here +@protocol SonosControllerStoreDelegate +@required +- (void) didFinishDiscoveringControllers: (NSArray *)controllers; +@end + +@interface SonosControllerStore : NSObject { + id _delegate; +} + +@property (nonatomic, strong) id delegate; @property (nonatomic, readonly) NSArray *allControllers; @property (nonatomic, readonly) NSArray *coordinators; @property (nonatomic, readonly) NSArray *slaves; diff --git a/SonosKit/SonosControllerStore.m b/SonosKit/SonosControllerStore.m index 7acdb55..f3c15bb 100644 --- a/SonosKit/SonosControllerStore.m +++ b/SonosKit/SonosControllerStore.m @@ -12,6 +12,8 @@ @implementation SonosControllerStore +@synthesize delegate; + + (SonosControllerStore *)sharedStore { static SonosControllerStore *sharedStore = nil; @@ -63,7 +65,7 @@ - (NSArray *)data - (void)discoverControllers { [SonosDiscovery discoverControllers:^(NSArray *objects, NSError *error) { - [self willChangeValueForKey:@"allControllers"]; + //[self willChangeValueForKey:@"allControllers"]; NSMutableArray *controllers = [[NSMutableArray alloc] init]; @@ -79,7 +81,8 @@ - (void)discoverControllers _allControllers = [NSArray arrayWithArray:controllers]; [self organizeControllers]; - [self didChangeValueForKey:@"allControllers"]; + //[self didChangeValueForKey:@"allControllers"]; + [delegate didFinishDiscoveringControllers:[NSArray arrayWithArray:controllers]]; }]; } @@ -148,4 +151,4 @@ - (BOOL)saveChanges return [NSKeyedArchiver archiveRootObject:_allControllers toFile:path]; } -@end \ No newline at end of file +@end diff --git a/SonosKit/SonosDiscovery.m b/SonosKit/SonosDiscovery.m index 0c7043a..82bf3e7 100644 --- a/SonosKit/SonosDiscovery.m +++ b/SonosKit/SonosDiscovery.m @@ -55,7 +55,7 @@ + (void)discoverControllers:(void(^)(NSArray *controllers, NSError *error))compl NSString *ip = [ipLocation substringWithRange:ipRegexMatch.range]; BOOL coordinator = [input[@"coordinator"] isEqualToString:@"true"] ? YES : NO; - if (![input[@"text"] isEqualToString:@"Sonos Bridge"]) { + if (![input[@"text"] isEqualToString:@"Sonos Bridge"] && ![input[@"text"] isEqualToString:@"BRIDGE"]) { [controllers addObject:@{ @"ip": ip, @"name": input[@"text"],