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

📄 mainqqlistener.mm

📁 lumaqq
💻 MM
📖 第 1 页 / 共 5 页
字号:
					[[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 + -