⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tempsessionimcontainercontroller.mm

📁 lumaqq
💻 MM
📖 第 1 页 / 共 2 页
字号:
		  contextInfo:nil];
}

- (void)startGetVerifyCodeImage {
	[m_verifyCodeHelper start];
}

#pragma mark -
#pragma mark sheet delegate

- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo {
	switch(returnCode) {
		case NO:
			[m_sendQueue removeAllObjects];
			m_sending = NO;
			break;
	}
}

#pragma mark -
#pragma mark downloader delegate

- (void)downloadDidFinish:(NSURLDownload *)download {
	// refresh ui
	[m_btnRefresh setEnabled:YES];
	
	// set verify code image
	[m_ivVerifyCode setImage:[m_verifyCodeHelper image]];
	
	// refresh ui
	[m_piBusy setHidden:YES];
	[m_piBusy stopAnimation:self];
	[m_btnOK setEnabled:YES];
	[m_btnCancel setEnabled:YES];
	[m_btnRefresh setEnabled:YES];
	[m_txtHint setStringValue:kStringEmpty];
	
	// show code panel
	if(![m_verifyCodeWindow isVisible]) 
		[self showVerifyCodePanel];
}

- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error {
	// refresh ui
	[m_btnRefresh setEnabled:YES];
	
	// show warning
	[AlertTool showWarning:[m_imView window]
				   message:L(@"LQWarningGetVerifyCodeFailed", @"TempSessionIMContainer")];
}

- (void)download:(NSURLDownload *)download didReceiveResponse:(NSURLResponse *)response {
}

#pragma mark -
#pragma mark actions

- (IBAction)onRefresh:(id)sender {
	[m_piBusy setHidden:NO];
	[m_piBusy startAnimation:self];
	[m_btnRefresh setEnabled:NO];
	[m_btnOK setEnabled:NO];
	[m_btnCancel setEnabled:NO];
	
	[self startGetVerifyCodeImage];
}

- (IBAction)onOK:(id)sender {
	[m_piBusy setHidden:NO];
	[m_piBusy startAnimation:self];
	[m_btnRefresh setEnabled:NO];
	[m_btnOK setEnabled:NO];
	[m_btnCancel setEnabled:NO];
	
	// get auto info by cookie
	NSString* cookieHex = [m_verifyCodeHelper cookie];
	m_waitingSequence = [[m_mainWindowController client] getUserTempSessionIMAuthInfo:[m_user QQ]
																		   verifyCode:[m_txtVerifyCode stringValue]
																			   cookie:cookieHex];
}

- (IBAction)onCancel:(id)sender {
	[NSApp endSheet:m_verifyCodeWindow returnCode:NO];
	[m_verifyCodeWindow orderOut:self];
}

#pragma mark -
#pragma mark qq event handler

- (BOOL)handleQQEvent:(QQNotification*)event {
	BOOL ret = NO;
	
	switch([event eventId]) {
		case kQQEventGetUserInfoOK:
			ret = [self handleGetUserInfoOK:event];
			break;
		case kQQEventSendTempSessionIMOK:
			ret = [self handleSendTempSessionIMOK:event];
			break;
		case kQQEventSendTempSessionIMFailed:
			ret = [self handleSendTempSessionIMFailed:event];
			break;
		case kQQEventGetAuthInfoOK:
			ret = [self handleGetAuthInfoOK:event];
			break;
		case kQQEventGetAuthInfoNeedVerifyCode:
			ret = [self handleGetAuthInfoNeedVerifyCode:event];
			break;
		case kQQEventGetAuthInfoByVerifyCodeOK:
			ret = [self handleGetAuthInfoByVerifyCodeOK:event];
			break;
		case kQQEventGetAuthInfoByVerifyCodeRetry:
			ret = [self handleGetAuthInfoByVerifyCodeRetry:event];
			break;
		case kQQEventTimeoutBasic:
			OutPacket* packet = [event outPacket];
			switch([packet command]) {
				case kQQCommandTempSessionOp:
					ret = [self handleTempSessionOpTimeout:event];
					break;
			}
			break;
	}
	
	return NO;
}

- (BOOL)handleGetUserInfoOK:(QQNotification*)event {
	GetUserInfoReplyPacket* packet = [event object];
	if([[packet contact] QQ] == [m_user QQ]) {
		[[NSNotificationCenter defaultCenter] postNotificationName:kIMContainerModelDidChangedNotificationName
															object:m_user];
	}
	
	return NO;
}

- (BOOL)handleSendTempSessionIMOK:(QQNotification*)event {
	TempSessionOpReplyPacket* packet = [event object];
	if([packet sequence] == m_waitingSequence) {
		// remove message from queue
		[m_sendQueue removeObjectAtIndex:0];
		
		// send next
		m_sending = NO;
		[self sendNextMessage];
		return YES;
	}
	return NO;
}

- (BOOL)handleSendTempSessionIMFailed:(QQNotification*)event {
	TempSessionOpReplyPacket* packet = [event object];
	if([packet sequence] == m_waitingSequence) {
		// get message from queue
		NSAttributedString* message = [[m_sendQueue objectAtIndex:0] retain];
		
		// remove message
		[m_sendQueue removeObjectAtIndex:0];
		
		// append timeout hint to output text view
		NSAttributedString* string = [[NSAttributedString alloc] initWithString:L(@"LQHintTimeoutHeader", @"BaseIMContainer")
																	 attributes:m_errorHintAttributes];
		[[m_txtOutput textStorage] appendAttributedString:string];
		[string release];
		[[m_txtOutput textStorage] appendAttributedString:message];
		[message release];
		string = [[NSAttributedString alloc] initWithString:L(@"LQHintTimeoutTail", @"BaseIMContainer")
												 attributes:m_errorHintAttributes];
		[[m_txtOutput textStorage] appendAttributedString:string];
		[string release];
		
		// send next
		m_sending = NO;
		[self sendNextMessage];
		return YES;
	}
	
	return NO;
}

- (BOOL)handleTempSessionOpTimeout:(QQNotification*)event {
	TempSessionOpPacket* packet = (TempSessionOpPacket*)[event outPacket];
	if([packet sequence] == m_waitingSequence) {
		// get message from queue
		NSAttributedString* message = [[m_sendQueue objectAtIndex:0] retain];
		
		// remove message
		[m_sendQueue removeObjectAtIndex:0];
		
		// append timeout hint to output text view
		NSAttributedString* string = [[NSAttributedString alloc] initWithString:L(@"LQHintTimeoutHeader", @"BaseIMContainer")
																	 attributes:m_errorHintAttributes];
		[[m_txtOutput textStorage] appendAttributedString:string];
		[string release];
		[[m_txtOutput textStorage] appendAttributedString:message];
		[message release];
		string = [[NSAttributedString alloc] initWithString:L(@"LQHintTimeoutTail", @"BaseIMContainer")
												 attributes:m_errorHintAttributes];
		[[m_txtOutput textStorage] appendAttributedString:string];
		[string release];
		
		// send next
		m_sending = NO;
		[self sendNextMessage];
		return YES;
	}
	return NO;
}

- (BOOL)handleGetAuthInfoOK:(QQNotification*)event {
	AuthInfoOpReplyPacket* packet = [event object];
	if([packet sequence] == m_waitingSequence) {		
		// send temp im
		m_waitingSequence = [[m_mainWindowController client] sendTempSessionIM:[m_user QQ]
																   messageData:m_data
																	senderName:[[m_mainWindowController me] nick]
																	senderSite:@"LumaQQ"
																		 style:[FontTool chatFontStyleWithPreference:[[m_mainWindowController me] QQ]]
																	  authInfo:[packet authInfo]];
		
		// handled, so return YES
		return YES;
	}
	
	return NO;
}

- (BOOL)handleGetAuthInfoNeedVerifyCode:(QQNotification*)event {
	AuthInfoOpReplyPacket* packet = [event object];
	if([packet sequence] == m_waitingSequence) {
		// save url
		[m_verifyCodeHelper setUrl:[packet url]];
		
		// start to get verify code image
		[self startGetVerifyCodeImage];
		
		return YES;
	}
	
	return NO;
}

- (BOOL)handleGetAuthInfoByVerifyCodeOK:(QQNotification*)event {
	AuthInfoOpReplyPacket* packet = [event object];
	if([packet sequence] == m_waitingSequence) {
		// hide verify code window
		[m_piBusy setHidden:YES];
		[m_piBusy stopAnimation:self];
		[m_btnOK setEnabled:YES];
		[m_btnCancel setEnabled:YES];
		[m_btnRefresh setEnabled:YES];
		[NSApp endSheet:m_verifyCodeWindow returnCode:YES];
		[m_verifyCodeWindow orderOut:self];
		
		// send temp im
		m_waitingSequence = [[m_mainWindowController client] sendTempSessionIM:[m_user QQ]
																   messageData:m_data
																	senderName:[[m_mainWindowController me] nick]
																	senderSite:@"LumaQQ"
																		 style:[FontTool chatFontStyleWithPreference:[[m_mainWindowController me] QQ]]
																	  authInfo:[packet authInfo]];
		return YES;
	}
	
	return NO;
}

- (BOOL)handleGetAuthInfoByVerifyCodeRetry:(QQNotification*)event {
	AuthInfoOpReplyPacket* packet = [event object];
	if([packet sequence] == m_waitingSequence) {
		// stop ui
		[m_piBusy setHidden:YES];
		[m_piBusy stopAnimation:self];
		[m_btnOK setEnabled:YES];
		[m_btnCancel setEnabled:YES];
		[m_btnRefresh setEnabled:YES];
		[m_txtHint setStringValue:L(@"LQHintVerifyCodeRetry", @"TempSessionIMContainer")];
		
		return YES;
	}
	return NO;
}

@end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -