📄 mainqqlistener.mm
字号:
[[TimerTaskManager sharedManager] addTask:[ModelEffectTask taskWithMainWindow:m_main object:g]];
}
}
// a window is opened, no sound needed
if(!hasKeyWindow) {
// sound
if([cache isEnableSound])
[[SoundHelper shared] playSound:kLQSoundUserMessage QQ:[m_me QQ]];
// growl
[[GrowlApplicationBridge growlDelegate] normalIM:user
packet:packet
mainWindow:m_main];
}
// if message if from mobile QQ, then set mobile chatting flag to this user
if([[packet normalIM] fromMobileQQ]) {
if(![user mobileChatting]) {
[user setMobileChatting:YES];
[[m_main userOutline] reloadItem:user];
}
} else {
if([user mobileChatting]) {
[user setMobileChatting:NO];
[[m_main userOutline] reloadItem:user];
}
}
break;
case kQQIMTypeTempSession:
// get user
user = [m_groupManager user:[header sender]];
if(user == nil) {
user = [[[User alloc] initWithQQ:[header sender] domain:m_main] autorelease];
TempSessionIM* im = [packet tempSessionIM];
[user setNick:[im nick]];
// add to uesr registry
[m_groupManager addUser:user groupIndex:kGroupIndexUndefined];
}
// get group
g = [m_groupManager group:[user groupIndex]];
// check relationship
bBlacklist = g != nil && [g isBlacklist];
// if user is in blacklist, don't push message into queue
// or if user is stranger and you set to reject stranger message, don't push...
if(bBlacklist)
break;
if([cache rejectStrangerMessage])
break;
// get history, add it to history
history = [[m_main historyManager] getHistoryToday:[NSString stringWithFormat:@"%u_tempsession", [user QQ]]];
[history addPacket:packet];
// push message to message queue
[[m_main messageQueue] enqueue:packet];
enqueued = YES;
// check auto eject option
// if need eject, open im window, otherwise play sound
hasKeyWindow = [[m_main windowRegistry] isTempSessionIMWindowOrTabFocused:[NSNumber numberWithUnsignedInt:[user QQ]] mainWindow:m_main];
if([cache autoEjectMessage] || hasKeyWindow) {
// open im window
NSWindowController* winController = [[m_main windowRegistry] showTempSessionIMWindowOrTab:user mainWindow:m_main];
// activate im window
[NSApp activateIgnoringOtherApps:YES];
[[winController window] orderFront:self];
[[winController window] makeKeyWindow];
// no jump
enqueued = NO;
jumpIcon = NO;
} else {
[user increaseTempSessionMessageCount];
if(g) {
[g increaseMessageCount];
if([user messageCount] + [user mobileMessageCount] + [user tempSessionMessageCount] == 1) {
[[TimerTaskManager sharedManager] addTask:[ModelEffectTask taskWithMainWindow:m_main object:user]];
[[TimerTaskManager sharedManager] addTask:[ModelEffectTask taskWithMainWindow:m_main object:g]];
}
}
}
// if no window is opened, show sound and growl hint
if(!hasKeyWindow) {
// sound
if([cache isEnableSound])
[[SoundHelper shared] playSound:kLQSoundUserMessage QQ:[m_me QQ]];
// growl
[[GrowlApplicationBridge growlDelegate] tempSessionIM:user
packet:packet
mainWindow:m_main];
}
break;
case kQQIMTypeMobileQQ:
// get user and group
user = [m_groupManager user:[header sender]];
g = (user == nil) ? nil : [m_groupManager group:[user groupIndex]];
// create user if user is nil
if(user == nil) {
// create user add to friend or stranger group
user = [[[User alloc] initWithQQ:[header sender] domain:m_main] autorelease];
[m_groupManager addUser:user groupIndex:[m_groupManager strangerGroupIndex]];
[[m_main userOutline] reloadItem:[m_groupManager strangerGroup] reloadChildren:YES];
[[m_main client] getUserInfo:[user QQ]];
}
// get user group, if group is nil, make group point to stranger group
g = [m_groupManager group:[user groupIndex]];
if(g == nil) {
[m_groupManager addUser:user groupIndex:[m_groupManager strangerGroupIndex]];
[[m_main userOutline] reloadItem:[m_groupManager strangerGroup] reloadChildren:YES];
g = [m_groupManager strangerGroup];
[user setGroupIndex:[m_groupManager strangerGroupIndex]];
}
// get history, add it to history
history = [[m_main historyManager] getHistoryToday:[NSString stringWithFormat:@"%u_mobile", [user QQ]]];
[history addPacket:packet];
// push message to message queue
[[m_main messageQueue] enqueue:packet];
enqueued = YES;
// check auto eject option
// if need eject, open im window, otherwise play sound
hasKeyWindow = [[m_main windowRegistry] isMobileIMWindowOrTabFocused:[NSNumber numberWithUnsignedInt:[user QQ]]
mainWindow:m_main];
if([cache autoEjectMessage] || hasKeyWindow) {
// open im window
NSWindowController* winController = [[m_main windowRegistry] showMobileIMWindowOrTab:user mainWindow:m_main];
// activate im window
[NSApp activateIgnoringOtherApps:YES];
[[winController window] orderFront:self];
[[winController window] makeKeyWindow];
// no jump
enqueued = NO;
jumpIcon = NO;
} else {
[user increaseMobileMessageCount];
[g increaseMessageCount];
if([user mobileMessageCount] + [user messageCount] + [user tempSessionMessageCount] == 1) {
[[TimerTaskManager sharedManager] addTask:[ModelEffectTask taskWithMainWindow:m_main object:user]];
[[TimerTaskManager sharedManager] addTask:[ModelEffectTask taskWithMainWindow:m_main object:g]];
}
}
// a window is opened, no sound needed
if(!hasKeyWindow) {
// sound
if([cache isEnableSound])
[[SoundHelper shared] playSound:kLQSoundUserMessage QQ:[m_me QQ]];
// growl
[[GrowlApplicationBridge growlDelegate] mobileIMFromUser:user
packet:packet
mainWindow:m_main];
}
break;
case kQQIMTypeMobileQQ2:
// get mobile, if can't, create one
MobileIM* mobileIM = [packet mobileIM];
Mobile* mobile = [m_groupManager mobile:[mobileIM mobile]];
if(mobile == nil) {
mobile = [[[Mobile alloc] initWithMobile:[mobileIM mobile] domain:m_main] autorelease];
[m_groupManager addMobile:mobile];
[[m_main mobileTable] reloadData];
}
// get history, add it to history
history = [[m_main historyManager] getHistoryToday:[mobile mobile]];
[history addPacket:packet];
// enqueue
[[m_main messageQueue] enqueue:packet];
enqueued = YES;
// check auto eject option
hasKeyWindow = [[m_main windowRegistry] isMobileIMWindowOrTabFocusedByMobile:[mobile mobile]
mainWindow:m_main];
if([cache autoEjectMessage] || hasKeyWindow) {
// open im window
NSWindowController* winController = [[m_main windowRegistry] showMobileIMWindowOrTabByMobile:mobile mainWindow:m_main];
// activate im window
[NSApp activateIgnoringOtherApps:YES];
[[winController window] orderFront:self];
[[winController window] makeKeyWindow];
// no jump
enqueued = NO;
jumpIcon = NO;
} else {
[mobile increaseMessageCount];
if([mobile messageCount] == 1) {
[[TimerTaskManager sharedManager] addTask:[ModelEffectTask taskWithMainWindow:m_main object:mobile]];
}
}
// if window is not opened, show sound and growl hint
if(!hasKeyWindow) {
// sound
if([cache isEnableSound])
[[SoundHelper shared] playSound:kLQSoundUserMessage QQ:[m_me QQ]];
// growl
[[GrowlApplicationBridge growlDelegate] mobileIM:mobile
packet:packet
mainWindow:m_main];
}
break;
case kQQIMTypeTempCluster:
// get temp cluter
ClusterIM* clusterIM = [packet clusterIM];
Cluster* tempCluster = [m_groupManager cluster:[clusterIM internalId]];
BOOL noSuchCluster = tempCluster == nil;
// get parent cluster, if nil, add it
Cluster* parentCluster = [m_groupManager cluster:[clusterIM parentInternalId]];
if(parentCluster == nil) {
// add cluster
if([clusterIM parentInternalId] != 0) {
parentCluster = [[[Cluster alloc] initWithInternalId:[clusterIM parentInternalId] domain:m_main] autorelease];
[m_groupManager addCluster:parentCluster];
[[m_main clusterOutline] reloadData];
[[m_main client] getClusterInfo:[parentCluster internalId]];
}
} else if([parentCluster memberCount] == 0)
[[m_main client] getClusterInfo:[parentCluster internalId]];
// if temp cluster nil, create temp cluster and add it
if(tempCluster == nil) {
// add
tempCluster = [[[Cluster alloc] initWithInternalId:[clusterIM internalId] domain:m_main] autorelease];
[tempCluster setPermanent:NO];
[tempCluster setTempType:([clusterIM parentInternalId] == 0 ? kQQTempClusterTypeDialog : kQQTempClusterTypeSubject)];
[tempCluster setParentId:[clusterIM parentInternalId]];
[m_groupManager addCluster:tempCluster];
// refresh ui
[[m_main clusterOutline] reloadData];
// get temp cluster info
if([tempCluster isSubject])
[[m_main client] getSubjectInfo:[tempCluster internalId] parent:[tempCluster parentId]];
else if([tempCluster isDialog])
[[m_main client] getDialogInfo:[tempCluster internalId]];
}
// get temp cluster info if necessary
if(noSuchCluster && [[tempCluster info] version] < [clusterIM versionId]) {
// get cluster info
if([clusterIM parentInternalId] == 0)
[[m_main client] getDialogInfo:[tempCluster internalId]];
else
[[m_main client] getSubjectInfo:[tempCluster internalId]
parent:[clusterIM parentInternalId]];
}
// if sender is me, don't push to queue
if([clusterIM sender] != [m_me QQ]) {
// get history, save it to history
History* history = [[m_main historyManager] getHistoryToday:[NSString stringWithFormat:@"%u", [tempCluster internalId]]];
if([[m_main windowRegistry] isClusterIMWindowOrTabFocused:[NSNumber numberWithUnsignedInt:[tempCluster internalId]]
mainWindow:m_main]) {
// push message
[[m_main messageQueue] enqueue:packet];
// get window
NSWindowController* winController = [[m_main windowRegistry] showClusterIMWindowOrTab:tempCluster mainWindow:m_main];
// activate im window
[NSApp activateIgnoringOtherApps:YES];
[[winController window] orderFront:self];
[[winController window] makeKeyWindow];
// save history
[history addPacket:packet];
jumpIcon = NO;
} else {
[[m_main messageQueue] enqueue:packet];
enqueued = YES;
// add to history
[history addPacket:packet];
// increase messsage count
[tempCluster increaseMessageCount];
[[TimerTaskManager sharedManager] addTask:[ModelEffectTask taskWithMainWindow:m_main object:tempCluster]];
// sound
if([cache isEnableSound])
[[SoundHelper shared] playSound:kLQSoundClusterMessage QQ:[m_me QQ]];
// growl
User* u = [m_groupManager user:[clusterIM sender]];
if(u == nil)
u = [[[User alloc] initWithQQ:[clusterIM sender] domain:m_main] autorelease];
[[GrowlApplicationBridge growlDelegate] clusterIM:tempCluster
user:u
packet:packet
mainWindow:m_main];
}
}
break;
case kQQIMTypeCluster:
case kQQIMTypeClusterUnknown:
Cluster* cluster = [m_groupManager cluster:[header sender]];
if(cluster == nil) {
// add cluster
cluster = [[[Cluster alloc] initWithInternalId:[header sender] domain:m_main] autorelease];
[m_groupManager addCluster:cluster];
[[m_main clusterOutline] reloadData];
[[m_main client] getClusterInfo:[cluster internalId]];
} else if([[cluster info] version] < [[packet clusterIM] versionId]) {
// check version id, get info if local info is out of date
[[cluster info] setVersion:[[packet clusterIM] versionId]];
[[m_main client] getClusterInfo:[header sender]];
}
// if sender is me, don't push to queue
if([[packet clusterIM] sender] != [m_me QQ]) {
// get history, save it to history
History* history = [[m_main historyManager] getHistoryToday:[NSString stringWithFormat:@"%u", [cluster internalId]]];
if([[m_main windowRegistry] isClusterIMWindowOrTabFocused:[NSNumber numberWithUnsignedInt:[cluster internalId]]
mainWindow:m_main]) {
// push message
[[m_main messageQueue] enqueue:packet];
// get window
NSWindowController* winController = [[m_main windowRegistry] showClusterIMWindowOrTab:cluster mainWindow:m_main];
// activate im window
[NSApp activateIgnoringOtherApps:YES];
[[winController window] orderFront:self];
[[winController window] makeKeyWindow];
// save history
[history addPacket:packet];
jumpIcon = NO;
} else {
// check other cluster message setting
switch([cluster messageSetting]) {
case kQQClusterMessageAutoEject:
[[m_main messageQueue] enqueue:packet];
NSWindowController* winController = [[m_main windowRegistry] showClusterIMWindowOrTab:cluster mainWindow:m_main];
// activate im window
[NSApp activateIgnoringOtherApps:YES];
[[winController window] orderFront:self];
[[winController window] makeKeyWindow];
// play sound
[[SoundHelper shared] playSound:kLQSoundClusterMessage QQ:[m_me QQ]];
// no jump
enqueued = NO;
jumpIcon = NO;
// add to history
[history addPacket:packet];
break;
case kQQClusterMessageDisplayCount:
[[m_main messageQueue] enqueue:packet];
[cluster increaseMessageCount];
[[m_main clusterOutline] reloadItem:cluster];
jumpIcon = NO;
// add to history
[history addPacket:packet];
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -