Fixed issues with going to sleep, getting Google Contacts, quitting, and SMS Sound notifications.
This commit is contained in:
		
							parent
							
								
									d78ec38bf9
								
							
						
					
					
						commit
						7a586f0eb1
					
				@ -153,7 +153,7 @@ typedef enum {
 | 
			
		||||
 | 
			
		||||
#if !TARGET_OS_IPHONE
 | 
			
		||||
- (BOOL)setInputSoundDevice:(int)theInputDevice outputSoundDevice:(int)theOutputDevice;
 | 
			
		||||
- (BOOL)stopSound;
 | 
			
		||||
- (BOOL)stopAudio;
 | 
			
		||||
- (void)updateAudioDevices;
 | 
			
		||||
- (NSArray *)audioDevices;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -617,19 +617,20 @@ static OSStatus MGMAudioDevicesChanged(AudioHardwarePropertyID propertyID, void
 | 
			
		||||
 | 
			
		||||
- (void)computerSleep {
 | 
			
		||||
	restartAccounts = [accounts copy];
 | 
			
		||||
	[self stopBackground];
 | 
			
		||||
	[accounts makeObjectsPerformSelector:@selector(logout)];
 | 
			
		||||
#if !TARGET_OS_IPHONE
 | 
			
		||||
	[self stopAudio];
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
- (void)computerWake {
 | 
			
		||||
#if !TARGET_OS_IPHONE
 | 
			
		||||
	[self updateAudioDevices];
 | 
			
		||||
#endif
 | 
			
		||||
	if (restartAccounts!=nil) {
 | 
			
		||||
		for (int i=0; i<[restartAccounts count]; i++) {
 | 
			
		||||
			if (![accounts containsObject:[restartAccounts objectAtIndex:i]])
 | 
			
		||||
				[accounts addObject:[restartAccounts objectAtIndex:i]];
 | 
			
		||||
		}
 | 
			
		||||
		[restartAccounts makeObjectsPerformSelector:@selector(login)];
 | 
			
		||||
		[restartAccounts release];
 | 
			
		||||
		restartAccounts = nil;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	[self start];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)registerThread:(pj_thread_desc *)thePJThreadDesc {
 | 
			
		||||
@ -845,7 +846,7 @@ static OSStatus MGMAudioDevicesChanged(AudioHardwarePropertyID propertyID, void
 | 
			
		||||
	bzero(&PJThreadDesc, sizeof(pj_thread_desc));
 | 
			
		||||
	return (status==PJ_SUCCESS);
 | 
			
		||||
}
 | 
			
		||||
- (BOOL)stopSound {
 | 
			
		||||
- (BOOL)stopAudio {
 | 
			
		||||
	if (state!=MGMSIPStartedState)
 | 
			
		||||
		return NO;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
@ -60,6 +60,10 @@
 | 
			
		||||
	NSString *prefix = [[self class] prefixForName:name];
 | 
			
		||||
	NSString *uri = nil;
 | 
			
		||||
	if (prefix!=nil) {
 | 
			
		||||
		if (MGMXMLNodePtr->doc==NULL) {
 | 
			
		||||
			NSLog(@"You may not search for elements with a namespace if there is no document.");
 | 
			
		||||
			return nil;
 | 
			
		||||
		}
 | 
			
		||||
		xmlNsPtr namespace = xmlSearchNs(MGMXMLNodePtr->doc, MGMXMLNodePtr, [prefix xmlString]);
 | 
			
		||||
		if (namespace!=NULL)
 | 
			
		||||
			uri = [NSString stringWithXMLString:namespace->href];
 | 
			
		||||
 | 
			
		||||
@ -71,6 +71,7 @@ struct _xmlCom {
 | 
			
		||||
	xmlNsPtr namespaceXML;
 | 
			
		||||
	xmlNodePtr parentNode;
 | 
			
		||||
	MGMXMLNodeKind type;
 | 
			
		||||
	MGMXMLNode *documentNode;
 | 
			
		||||
}
 | 
			
		||||
+ (id)nodeWithTypeXMLPtr:(xmlTypPtr)theXMLPtr;
 | 
			
		||||
- (id)initWithTypeXMLPtr:(xmlTypPtr)theXMLPtr;
 | 
			
		||||
@ -81,6 +82,7 @@ struct _xmlCom {
 | 
			
		||||
+ (void)removeChildrenFromNode:(xmlNodePtr)theNode;
 | 
			
		||||
+ (void)freeNode:(xmlNodePtr)theNode;
 | 
			
		||||
- (void)setTypeXMLPtr:(xmlTypPtr)theXMLPtr;
 | 
			
		||||
- (void)releaseDocument;
 | 
			
		||||
+ (BOOL)isNode:(MGMXMLNodeKind)theType;
 | 
			
		||||
- (BOOL)isNode;
 | 
			
		||||
+ (NSError *)lastError;
 | 
			
		||||
 | 
			
		||||
@ -84,6 +84,8 @@ static void MGMXMLErrorHandler(void *userData, xmlErrorPtr error) {
 | 
			
		||||
		parentNode = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	if (commonXML!=NULL) {
 | 
			
		||||
		if (type!=MGMXMLDocumentKind)
 | 
			
		||||
			[self releaseDocument];
 | 
			
		||||
		commonXML->_private = NULL;
 | 
			
		||||
		
 | 
			
		||||
		if (commonXML->parent==NULL) {
 | 
			
		||||
@ -91,7 +93,7 @@ static void MGMXMLErrorHandler(void *userData, xmlErrorPtr error) {
 | 
			
		||||
				xmlNodePtr child = commonXML->children;
 | 
			
		||||
				while (child!=NULL) {
 | 
			
		||||
					xmlNodePtr nextChild = child->next;
 | 
			
		||||
					if (child->type == XML_ELEMENT_NODE) {
 | 
			
		||||
					if (child->type==MGMXMLElementKind) {
 | 
			
		||||
						if (child->prev!=NULL)
 | 
			
		||||
							child->prev->next = child->next;
 | 
			
		||||
						if (child->next!=NULL)
 | 
			
		||||
@ -199,7 +201,10 @@ static void MGMXMLErrorHandler(void *userData, xmlErrorPtr error) {
 | 
			
		||||
			theNode->parent = NULL;
 | 
			
		||||
			theNode->prev = NULL;
 | 
			
		||||
			theNode->next = NULL;
 | 
			
		||||
			if (theNode->doc!=NULL) [self stripDocumentFromNode:theNode];
 | 
			
		||||
			if (theNode->doc!=NULL) {
 | 
			
		||||
				[(MGMXMLNode *)theNode->_private releaseDocument];
 | 
			
		||||
				[self stripDocumentFromNode:theNode];
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -219,6 +224,14 @@ static void MGMXMLErrorHandler(void *userData, xmlErrorPtr error) {
 | 
			
		||||
			self->isa = [MGMXMLDocument class];
 | 
			
		||||
		else if (type==MGMXMLElementKind && [self isMemberOfClass:[MGMXMLNode class]])
 | 
			
		||||
			self->isa = [MGMXMLElement class];
 | 
			
		||||
		if (type!=MGMXMLDocumentKind)
 | 
			
		||||
			documentNode = [[MGMXMLNode alloc] initWithTypeXMLPtr:(xmlTypPtr)commonXML->doc];
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
- (void)releaseDocument {
 | 
			
		||||
	if (documentNode!=nil) {
 | 
			
		||||
		[documentNode release];
 | 
			
		||||
		documentNode = nil;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
+ (BOOL)isNode:(MGMXMLNodeKind)theType {
 | 
			
		||||
 | 
			
		||||
@ -60,6 +60,11 @@ NSString *MGMLastUserPhoneKey = @"MGMLastUserPhone";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
- (void)dealloc {
 | 
			
		||||
	if (progressFadeAnimation!=nil) {
 | 
			
		||||
		[progressFadeAnimation stopAnimation];
 | 
			
		||||
		[progressFadeAnimation release];
 | 
			
		||||
		progressFadeAnimation = nil;
 | 
			
		||||
	}
 | 
			
		||||
	[super dealloc];
 | 
			
		||||
	if (instance!=nil) {
 | 
			
		||||
		[instance setDelegate:nil];
 | 
			
		||||
 | 
			
		||||
@ -83,7 +83,7 @@ NSString * const MGMLogout = @"Logout";
 | 
			
		||||
	if ([[tableColumn identifier] isEqual:@"username"]) {
 | 
			
		||||
#if MGMSIPENABLED
 | 
			
		||||
		NSArray *users = [MGMUser users];
 | 
			
		||||
		if ([users count]>=row)
 | 
			
		||||
		if ([users count]<=row)
 | 
			
		||||
			return nil;
 | 
			
		||||
		MGMUser *user = [MGMUser userWithID:[users objectAtIndex:row]];
 | 
			
		||||
		if ([[user settingForKey:MGMSAccountType] isEqual:MGMSSIP]) {
 | 
			
		||||
@ -94,7 +94,7 @@ NSString * const MGMLogout = @"Logout";
 | 
			
		||||
		return [[MGMUser userNames] objectAtIndex:row];
 | 
			
		||||
	} else if ([[tableColumn identifier] isEqual:@"state"]) {
 | 
			
		||||
		NSDictionary *users = [MGMUser usersPlist];
 | 
			
		||||
		if ([[users allKeys] count]>=row)
 | 
			
		||||
		if ([[users allKeys] count]<=row)
 | 
			
		||||
			return nil;
 | 
			
		||||
		return ([[users objectForKey:[[users allKeys] objectAtIndex:row]] boolValue] ? @"✓" : @"");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,7 @@
 | 
			
		||||
- (void)dealloc {
 | 
			
		||||
	[[NSNotificationCenter defaultCenter] removeObserver:self];
 | 
			
		||||
	if (shouldRestart) {
 | 
			
		||||
		/*NSAlert *alert = [[NSAlert new] autorelease];
 | 
			
		||||
		NSAlert *alert = [[NSAlert new] autorelease];
 | 
			
		||||
		[alert setMessageText:@"Restart Required"];
 | 
			
		||||
		[alert setInformativeText:@"You have changed some settings that requires you to restart VoiceMac for them to take place, do you want to restart VoiceMac now?"];
 | 
			
		||||
		[alert addButtonWithTitle:@"Yes"];
 | 
			
		||||
@ -73,8 +73,8 @@
 | 
			
		||||
			NSString *relaunchPath = [[[NSBundle bundleWithIdentifier:@"org.andymatuschak.Sparkle"] resourcePath] stringByAppendingPathComponent:@"relaunch"];
 | 
			
		||||
			[NSTask launchedTaskWithLaunchPath:relaunchPath arguments:[NSArray arrayWithObjects:pathToRelaunch, [NSString stringWithFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]], nil]];
 | 
			
		||||
			[[NSApplication sharedApplication] terminate:self];
 | 
			
		||||
		}*/
 | 
			
		||||
		[[MGMSIP sharedSIP] restart];
 | 
			
		||||
		}
 | 
			
		||||
		//[[MGMSIP sharedSIP] restart];
 | 
			
		||||
	}
 | 
			
		||||
	if (mainView!=nil)
 | 
			
		||||
		[mainView release];
 | 
			
		||||
 | 
			
		||||
@ -62,6 +62,11 @@ NSString * const MGMSIPUserAreaCode = @"MGMVSIPUserAreaCode";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
- (void)dealloc {
 | 
			
		||||
	if (progressFadeAnimation!=nil) {
 | 
			
		||||
		[progressFadeAnimation stopAnimation];
 | 
			
		||||
		[progressFadeAnimation release];
 | 
			
		||||
		progressFadeAnimation = nil;
 | 
			
		||||
	}
 | 
			
		||||
	[super dealloc];
 | 
			
		||||
	if (calls!=nil) {
 | 
			
		||||
		[calls removeAllObjects];
 | 
			
		||||
 | 
			
		||||
@ -144,6 +144,7 @@ const float updateTimeInterval = 300.0;
 | 
			
		||||
	}
 | 
			
		||||
	NSDate *newestDate = [NSDate distantPast];
 | 
			
		||||
	BOOL newMessage = NO;
 | 
			
		||||
	BOOL newTab = NO;
 | 
			
		||||
	for (unsigned int i=0; i<[theMessages count]; i++) {
 | 
			
		||||
		if ([lastDates objectForKey:[theInstance userNumber]]==nil || (![[lastDates objectForKey:[theInstance userNumber]] isEqual:[[theMessages objectAtIndex:i] objectForKey:MGMITime]] && [[lastDates objectForKey:[theInstance userNumber]] earlierDate:[[theMessages objectAtIndex:i] objectForKey:MGMITime]]==[lastDates objectForKey:[theInstance userNumber]])) {
 | 
			
		||||
			NSMutableDictionary *messageInfo = [NSMutableDictionary dictionaryWithDictionary:[theMessages objectAtIndex:i]];
 | 
			
		||||
@ -151,16 +152,18 @@ const float updateTimeInterval = 300.0;
 | 
			
		||||
			[messageInfo removeObjectForKey:MGMIMessages];
 | 
			
		||||
			[messageInfo setObject:[[theInstance contacts] nameForNumber:[messageInfo objectForKey:MGMIPhoneNumber]] forKey:MGMTInName];
 | 
			
		||||
			[messageInfo setObject:[theInstance userNumber] forKey:MGMTUserNumber];
 | 
			
		||||
			BOOL window = NO;
 | 
			
		||||
			BOOL tab = NO;
 | 
			
		||||
			for (unsigned int m=0; m<[SMSMessages count]; m++) {
 | 
			
		||||
				if ([[[[SMSMessages objectAtIndex:m] messageInfo] objectForKey:MGMIPhoneNumber] isEqual:[messageInfo objectForKey:MGMIPhoneNumber]] && ([[[[SMSMessages objectAtIndex:m] messageInfo] objectForKey:MGMIID] isEqual:[messageInfo objectForKey:MGMIID]] || [[[[SMSMessages objectAtIndex:m] messageInfo] objectForKey:MGMIID] isEqual:@""]) && [[SMSMessages objectAtIndex:m] instance]==theInstance) {
 | 
			
		||||
					window = YES;
 | 
			
		||||
					[[SMSMessages objectAtIndex:m] updateWithMessages:messages messageInfo:messageInfo];
 | 
			
		||||
					tab = YES;
 | 
			
		||||
					if ([[SMSMessages objectAtIndex:m] updateWithMessages:messages messageInfo:messageInfo])
 | 
			
		||||
						newMessage = YES;
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if (!window && ![[[theMessages objectAtIndex:i] objectForKey:MGMIRead] boolValue]) {
 | 
			
		||||
			if (!tab && ![[[theMessages objectAtIndex:i] objectForKey:MGMIRead] boolValue]) {
 | 
			
		||||
				newMessage = YES;
 | 
			
		||||
				newTab = YES;
 | 
			
		||||
				[SMSMessages addObject:[MGMSMSMessageView viewWithManager:self messages:messages messageInfo:messageInfo instance:theInstance]];
 | 
			
		||||
			}
 | 
			
		||||
			if ([newestDate earlierDate:[[theMessages objectAtIndex:i] objectForKey:MGMITime]]==newestDate)
 | 
			
		||||
@ -168,10 +171,12 @@ const float updateTimeInterval = 300.0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (newMessage) {
 | 
			
		||||
		[self loadWindow];
 | 
			
		||||
		[lastDates setObject:newestDate forKey:[theInstance userNumber]];
 | 
			
		||||
		[self reloadData];
 | 
			
		||||
		[[controller themeManager] playSound:MGMTSSMSMessage];
 | 
			
		||||
	}
 | 
			
		||||
	if (newTab) {
 | 
			
		||||
		[self loadWindow];
 | 
			
		||||
		[self reloadData];
 | 
			
		||||
		[SMSWindow makeKeyAndOrderFront:self];
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,7 @@
 | 
			
		||||
 | 
			
		||||
- (void)sendNotifications;
 | 
			
		||||
 | 
			
		||||
- (void)updateWithMessages:(NSArray *)theMessages messageInfo:(NSDictionary *)theMessageInfo;
 | 
			
		||||
- (BOOL)updateWithMessages:(NSArray *)theMessages messageInfo:(NSDictionary *)theMessageInfo;
 | 
			
		||||
 | 
			
		||||
- (void)buildHTML;
 | 
			
		||||
- (void)addMessage:(NSDictionary *)theMessage;
 | 
			
		||||
 | 
			
		||||
@ -97,27 +97,30 @@
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)updateWithMessages:(NSArray *)theMessages messageInfo:(NSDictionary *)theMessageInfo {
 | 
			
		||||
- (BOOL)updateWithMessages:(NSArray *)theMessages messageInfo:(NSDictionary *)theMessageInfo {
 | 
			
		||||
	BOOL newIncomingMessages = NO;
 | 
			
		||||
	if (![[theMessageInfo objectForKey:MGMITime] isEqual:[messageInfo objectForKey:MGMITime]]) {
 | 
			
		||||
		if (messageInfo!=nil) [messageInfo release];
 | 
			
		||||
		messageInfo = [theMessageInfo mutableCopy];
 | 
			
		||||
		BOOL read = [[messageInfo objectForKey:MGMIRead] boolValue];
 | 
			
		||||
		[self setRead:read];
 | 
			
		||||
		[self setRead:[[messageInfo objectForKey:MGMIRead] boolValue]];
 | 
			
		||||
		
 | 
			
		||||
		BOOL rebuild = [[[[manager themeManager] variant] objectForKey:MGMTRebuild] boolValue];
 | 
			
		||||
		BOOL newMessages = NO;
 | 
			
		||||
		for (unsigned int i=[messages count]; i<[theMessages count]; i++) {
 | 
			
		||||
			newMessages = YES;
 | 
			
		||||
			[messages addObject:[theMessages objectAtIndex:i]];
 | 
			
		||||
			if (![[[theMessages objectAtIndex:i] objectForKey:MGMIYou] boolValue])
 | 
			
		||||
				newIncomingMessages = YES;
 | 
			
		||||
			if (!rebuild)
 | 
			
		||||
				[self addMessage:[messages lastObject]];
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if (newMessages && rebuild)
 | 
			
		||||
			[self buildHTML];
 | 
			
		||||
		if (!read)
 | 
			
		||||
		if (newIncomingMessages)
 | 
			
		||||
			[self sendNotifications];
 | 
			
		||||
	}
 | 
			
		||||
	return newIncomingMessages;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)updatedTheme:(NSNotification *)theNotification {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user