📄 tempsessionimcontainercontroller.mm
字号:
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 + -