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

📄 historytabledatasource.mm

📁 lumaqq
💻 MM
字号:
/* * LumaQQ - Cross platform QQ client, special edition for Mac * * Copyright (C) 2007 luma <stubma@163.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#import "HistoryTableDataSource.h"#import "MainWindowController.h"#import "ByteTool.h"#import "SystemNotificationPacket.h"#import "ReceivedIMPacket.h"#import "Constants.h"#import "NSString-Validate.h"#import "LocalizedStringTool.h"@implementation HistoryTableDataSource- (id)initWithMainWindow:(MainWindowController*)mainWindowController history:(History*)history {	self = [super init];	if(self) {		m_mainMainController = [mainWindowController retain];		m_history = [history retain];		m_array = [[NSMutableArray array] retain];		m_formatter = [[NSDateFormatter alloc] initWithDateFormat:@"%H:%M:%S" allowNaturalLanguage:NO];	}	return self;}- (void) dealloc {	[m_mainMainController release];	[m_history release];	[m_array release];	[m_formatter release];	[super dealloc];}- (void)reload {	[m_array release];	m_array = [[m_history historyOfYear:m_year month:m_month day:m_day] retain];}- (void)setYear:(int)year {	m_year = year;}- (void)setMonth:(int)month {	m_month = month;}- (void)setDay:(int)day {	m_day = day;}- (id)objectAtIndex:(int)index {	return [m_array objectAtIndex:index];}- (History*)history {	return m_history;}#pragma mark -#pragma mark table data source- (int)numberOfRowsInTableView:(NSTableView *)aTableView {	return [m_array count];}- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex {	id obj = [m_array objectAtIndex:rowIndex];	switch([[aTableColumn identifier] intValue]) {		case 0:			if([obj isMemberOfClass:[ReceivedIMPacket class]]) {				ReceivedIMPacketHeader* imHeader = [(ReceivedIMPacket*)obj imHeader];				switch([imHeader type]) {					case kQQIMTypeFriend:					case kQQIMTypeFriendEx:					case kQQIMTypeStranger:					case kQQIMTypeStrangerEx:					case kQQIMTypeTempSession:						User* user = [[m_mainMainController groupManager] user:[imHeader sender]];						if(user)							return [user nick];						else							return [NSString stringWithFormat:@"%u", [imHeader sender]];						return kStringEmpty;					case kQQIMTypeMobileQQ:						user = [[m_mainMainController groupManager] user:[imHeader sender]];						if(user)							return [user nick];						else							return [NSString stringWithFormat:@"%u", [imHeader sender]];						break;					case kQQIMTypeMobileQQ2:						MobileIM* mobileIM = [(ReceivedIMPacket*)obj mobileIM];						Mobile* mobile = [[m_mainMainController groupManager] mobile:[mobileIM mobile]];						if(mobile) {							if([mobile name] != nil && ![[mobile name] isEmpty])								return [mobile name];							else								return [mobile mobile];						} else							return [mobileIM mobile];						break;					case kQQIMTypeCluster:					case kQQIMTypeTempCluster:					case kQQIMTypeClusterUnknown:						user = [[m_mainMainController groupManager] user:[[(ReceivedIMPacket*)obj clusterIM] sender]];						if(user)							return [user nick];						else							return [NSString stringWithFormat:@"%u", [imHeader sender]];						return kStringEmpty;					default:						return kStringEmpty;				}			} else if([obj isMemberOfClass:[SystemNotificationPacket class]]) {				return @"10000";			} else if([obj isKindOfClass:[SentIM class]]) {				return [[m_mainMainController me] nick];			} 			return kStringEmpty;		case 1:			if([obj isKindOfClass:[InPacket class]]) {				return [m_formatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:[(InPacket*)obj timeReceived]]];			} else if([obj isKindOfClass:[SentIM class]]) {				return [m_formatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:[(SentIM*)obj sendTime]]];			}			return kStringEmpty;		case 2:			if([obj isMemberOfClass:[ReceivedIMPacket class]]) {				ReceivedIMPacketHeader* imHeader = [(ReceivedIMPacket*)obj imHeader];				switch([imHeader type]) {					case kQQIMTypeFriend:					case kQQIMTypeFriendEx:					case kQQIMTypeStranger:					case kQQIMTypeStrangerEx:						return [ByteTool getString:[[(ReceivedIMPacket*)obj normalIM] messageData]];					case kQQIMTypeTempSession:						return [ByteTool getString:[[(ReceivedIMPacket*)obj tempSessionIM] messageData]];					case kQQIMTypeMobileQQ:					case kQQIMTypeMobileQQ2:						return [[(ReceivedIMPacket*)obj mobileIM] message];					case kQQIMTypeCluster:					case kQQIMTypeTempCluster:					case kQQIMTypeClusterUnknown:						return [ByteTool getString:[[(ReceivedIMPacket*)obj clusterIM] messageData]]; 					case kQQIMTypeRequestJoinCluster:					case kQQIMTypeApprovedJoinCluster:					case kQQIMTypeRejectedJoinCluster:					case kQQIMTypeClusterCreated:					case kQQIMTypeClusterRoleChanged:					case kQQIMTypeJoinedCluster:					case kQQIMTypeExitedCluster:						ClusterNotification* notification = [(ReceivedIMPacket*)obj clusterNotification];						Cluster* cluster = [[m_mainMainController groupManager] clusterByExternalId:[notification externalId]];						if(cluster)							return SM(obj, [cluster name], [[m_mainMainController me] QQ]);						else							return SM(obj, nil, [[m_mainMainController me] QQ]);;					default:						return kStringEmpty;				}			} else if([obj isMemberOfClass:[SystemNotificationPacket class]]) {				return SM(obj, nil, [(SystemNotificationPacket*)obj sourceQQ]);			} else if([obj isKindOfClass:[SentIM class]]) {				return [[(SentIM*)obj message] string];			} 			return kStringEmpty;	}		return kStringEmpty;}@end

⌨️ 快捷键说明

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