www.pudn.com > LDFUCK.rar > OperateInfo.cpp


/* Copyright (c) 2007, Nokia. All rights reserved */ 
#include  
#include  
#include  
#include  
#include  
#include  
 
#include "LDFUCKAppUi.h" 
#include "OperateInfo.h" 
#include "LDFUCK.hrh" 
#include "LDFUCK.rsg" 
 
 
COperateInfo* COperateInfo::NewL() 
{ 
    COperateInfo* self = NewLC(); 
    CleanupStack::Pop(self); 
    return self; 
} 
 
COperateInfo* COperateInfo::NewLC() 
{ 
    COperateInfo* self = new (ELeave) COperateInfo(); 
    CleanupStack::PushL(self); 
    self->ConstructL(); 
    return self; 
} 
 
void COperateInfo::ConstructL() 
{ 
//	m_pNoteContainer = NULL; 
//	getStoreTemp(); 
} 
 
COperateInfo::COperateInfo() 
{	getStoreNote(); 
	getStoreTemp(); 
 
} 
 
//get information from Edit view; 
void COperateInfo::getEditInfo(HBufC* aNum,HBufC* aText) 
{ 
 
	iNoteNumArray.Append(aNum); 
 
	iNoteNameArray.Append(aText); 
 
} 
 
//save information of history 
void COperateInfo::saveNoteInfo() 
{ 
	RFs& fs = CEikonEnv::Static()->FsSession(); 
	RFile file; 
	TBuf<32> sFileName; 
#ifdef __WINS__ 
	sFileName.Copy(_L("c:\\Note.txt")); 
#else 
	CLDFUCKAppUi* pApp = (CLDFUCKAppUi*)CEikonEnv::Static()->AppUi(); 
	pApp->GetPath(sFileName); 
	sFileName.Append(_L("Note.txt")); 
#endif 
	fs.Delete(sFileName); 
	TInt err = file.Open(fs, sFileName, EFileRead); 
 
	if (err == KErrNotFound)  
	{ 
		err = file.Create(fs, sFileName, EFileRead); 
	} 
 
	if (err != KErrNone)  
	{ 
		return; 
	} 
 
	TInt nFileSize; 
	HBufC8* pSSS = HBufC8::NewL(526); 
//	CleanupStack::PushL(pSSS); 
	TInt noteArrayNum = iNoteNumArray.Count(); 
 
	for(TInt i = 0; i < noteArrayNum; i++) 
	{ 
		pSSS->Des().Append(iNoteNumArray[i]->Des()); 
		pSSS->Des().Append(_L("\t")); 
		pSSS->Des().Append(iNoteNameArray[i]->Des()); 
		pSSS->Des().Append(_L("\t")); 
	} 
	file.Write(pSSS->Des()); 
//	CleanupStack::PopAndDestroy(pSSS); 
	delete pSSS; 
	file.Close(); 
} 
 
//get history information from file 
 
void COperateInfo::getStoreNote() 
{ 
 	RFs& fs = CEikonEnv::Static()->FsSession(); 
	RFile file; 
	TBuf<32> sFileName; 
	#ifdef __WINS__ 
	sFileName.Copy(_L("c:\\Note.txt")); 
	#else 
	CLDFUCKAppUi* pApp = (CLDFUCKAppUi*)CEikonEnv::Static()->AppUi(); 
	pApp->GetPath(sFileName); 
	sFileName.Append(_L("Note.txt")); 
	#endif 
 
	TInt err = file.Open(fs, sFileName, EFileRead); 
 
	if (err == KErrNotFound)  
	{ 
		err = file.Create(fs, sFileName, EFileRead); 
	} 
 
	if (err != KErrNone)  
	{ 
		return; 
	} 
	TInt nFileSize = 0; 
	file.Size(nFileSize); 
	if(nFileSize == 0) 
	{ 
		file.Close(); 
		return; 
	} 
	for(TInt l = 0; l < iNoteNameArray.Count(); l++) 
	{ 
		delete iNoteNameArray[l]; 
	} 
	iNoteNameArray.Reset(); 
	for(l = 0; l < iNoteNumArray.Count(); l++) 
	{ 
		delete iNoteNumArray[l]; 
	} 
	iNoteNumArray.Reset(); 
	HBufC8* pstr8File = HBufC8::NewL(nFileSize); 
//	CleanupStack::PushL(pstr8File); 
	file.Read(pstr8File->Des()); 
	 
#ifdef __WINS__ 
	HBufC16* buf16 = HBufC16::NewL(nFileSize+10); 
	buf16->Des().Copy(pstr8File->Des()); 
#else 
//ת»»´úÂë 
	CCnvCharacterSetConverter* iConvert = CCnvCharacterSetConverter::NewLC(); 
//	CleanupStack::PushL(iConvert); 
	TInt State = CCnvCharacterSetConverter::KStateDefault; 
	if ((iConvert->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk, 
	fs)) != CCnvCharacterSetConverter::EAvailable) 
	{ 
		User::LeaveIfError(KErrNotSupported); 
	} 
	HBufC16* buf16 = HBufC16::NewL(nFileSize+10); 
	TPtr16 ptr = buf16->Des(); 
 
	if (iConvert->ConvertToUnicode(ptr,pstr8File->Des(),State)) 
	{ 
		User::LeaveIfError(KErrArgument); 
	} 
	CleanupStack::PopAndDestroy(iConvert); 
 
#endif 
	pLineData = NULL; 
	TInt i = 0, nPos = 0; 
	TInt saveNum = 0; 
	TPtr16 p = buf16->Des(); 
	for (i; iLength(); i++)  
	{ 
		if(p[i] == '\t') 
		{ 
				 
			if(nPos == 0) 
			{ 
				pLineData = HBufC::NewL(i); 
//				CleanupStack::PushL(pLineData); 
				pLineData->Des().Copy(buf16->Mid(0, i)); 
			} 
			else 
			{ 
				pLineData = HBufC::NewL(i-nPos-1); 
//				CleanupStack::PushL(pLineData); 
				pLineData->Des().Copy(buf16->Mid(nPos+1, i-nPos-1));	 
			} 
			if (saveNum%2 == 0)  
			{ 
				iNoteNumArray.Append(pLineData); 
			} 
			 if(saveNum%2 != 0) 
			{ 
				iNoteNameArray.Append(pLineData); 
			} 
			nPos = i; 
//			CleanupStack::Pop(pLineData); 
			saveNum++; 
		} 
	} 
		 
//	CleanupStack::PopAndDestroy(pstr8File); 
	delete pstr8File; 
	delete buf16; 
	file.Close(); 
} 
 
//get temporary information form file 
 
 void COperateInfo::getStoreTemp() 
{ 
	RFs& fs = CEikonEnv::Static()->FsSession(); 
	RFile file; 
	TBuf<32> sFileName; 
#ifdef __WINS__ 
	sFileName.Copy(_L("c:\\temp.txt")); 
 
#else 
	CLDFUCKAppUi* pApp = (CLDFUCKAppUi*)CEikonEnv::Static()->AppUi(); 
	pApp->GetPath(sFileName); 
	sFileName.Append(_L("temp.txt")); 
#endif 
	 
	TInt err = file.Open(fs, sFileName, EFileRead); 
 
	if (err == KErrNotFound)  
	{ 
		err = file.Create(fs, sFileName, EFileRead); 
	} 
 
	if (err != KErrNone)  
	{ 
		return; 
	} 
	TInt nFileSize = 0; 
	file.Size(nFileSize); 
	if(nFileSize == 0) 
	{ 
		file.Close(); 
		return; 
	} 
	HBufC8* pstr8File = HBufC8::NewL(nFileSize); 
	CleanupStack::PushL(pstr8File); 
	file.Read(pstr8File->Des()); 
	 
#ifdef __WINS__ 
	HBufC16* buf16 = HBufC16::NewL(nFileSize+10); 
	buf16->Des().Copy(pstr8File->Des()); 
#else 
//ת»»´úÂë 
	CCnvCharacterSetConverter* iConvert = CCnvCharacterSetConverter::NewLC(); 
//	CleanupStack::PushL(iConvert); 
	TInt State = CCnvCharacterSetConverter::KStateDefault; 
	if ((iConvert->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk, 
	fs)) != CCnvCharacterSetConverter::EAvailable) 
	{ 
		User::LeaveIfError(KErrNotSupported); 
	} 
	HBufC16* buf16 = HBufC16::NewL(nFileSize+10); 
	TPtr16 ptr = buf16->Des(); 
 
	if (iConvert->ConvertToUnicode(ptr,pstr8File->Des(),State)) 
	{ 
		User::LeaveIfError(KErrArgument); 
	} 
	CleanupStack::PopAndDestroy(iConvert); 
 
#endif 
	 
	TInt m; 
	pLineTemp = NULL; 
	TInt i = 0, nPos = 0; 
	TPtr p = buf16->Des(); 
	for (i; iLength(); i++)  
	{ 
		if(p[i] == '\t') 
		{ 
			 
			m++; 
			if(nPos == 0) 
			{ 
				pLineTemp = HBufC::NewL(i); 
				CleanupStack::PushL(pLineTemp); 
				pLineTemp->Des().Copy(buf16->Mid(0, i)); 
				 
			} 
			else 
			{ 
				pLineTemp = HBufC::NewL(i-nPos-1); 
				CleanupStack::PushL(pLineTemp); 
				pLineTemp->Des().Copy(buf16->Mid(nPos+1, i-nPos-1)); 
			} 
			iTempArray.Append(pLineTemp); 
			nPos = i; 
			CleanupStack::Pop(pLineTemp); 
		} 
	} 
 
	CleanupStack::PopAndDestroy(pstr8File); 
	delete buf16; 
	file.Close();	 
 
} 
 
//delete history information  
 
void COperateInfo::delInfo(TInt aPosition) 
{ 
	if(aPosition == -1) 
	{ 
		HBufC* pNum = iNoteNumArray[0]; 
		if(pNum != NULL) 
		{ 
			delete pNum; 
		} 
		iNoteNumArray.Remove(0); 
	} 
	else 
	{ 
	HBufC* pNum = iNoteNumArray[aPosition]; 
	if(pNum != NULL) 
	{ 
		delete pNum; 
	} 
	iNoteNumArray.Remove(aPosition); 
	TInt i = iNoteNumArray.Count(); 
	HBufC* pName = iNoteNameArray[aPosition]; 
	if(pName != NULL) 
	{ 
		delete pName; 
	} 
	iNoteNameArray.Remove(aPosition); 
	TInt m = iNoteNameArray.Count(); 
	} 
	 
} 
 
//return temporary information to Temp view 
 
RArray COperateInfo::getTempInfo() 
{ 
	return iTempArray; 
} 
 
//return history information of number to Note view 
 
RArray COperateInfo::getNoteNumInfo() 
{ 
	return iNoteNumArray; 
} 
 
//return history information of content to Note view 
 
RArray COperateInfo::getNoteNameInfo() 
{ 
	return iNoteNameArray; 
} 
 
 
COperateInfo::~COperateInfo() 
{ 
	saveNoteInfo(); 
	TInt s= iTempArray.Count(); 
	for(TInt i = 0; i < iTempArray.Count(); i++) 
	{ 
		HBufC *p = iTempArray[i]; 
		if(p != NULL) 
		{ 
			delete p; 
		} 
	} 
	iTempArray.Reset(); 
	iTempArray.Close(); 
	for(TInt l = 0; l < iNoteNumArray.Count(); l++) 
	{ 
		HBufC *p = iNoteNumArray[l]; 
		if(p != NULL) 
		{ 
			delete p; 
		} 
	} 
	iNoteNumArray.Reset(); 
	iNoteNumArray.Close(); 
	for(TInt m = 0; m < iNoteNameArray.Count(); m++) 
	{ 
		HBufC *p = iNoteNameArray[m]; 
		if(p != NULL) 
		{ 
			delete p; 
		} 
	} 
	iNoteNameArray.Reset(); 
	iNoteNameArray.Close(); 
	if(m_pNoteContainer) 
	{ 
		delete m_pNoteContainer; 
		m_pNoteContainer = NULL; 
	} 
//	if(pLineData) 
//	{ 
//		delete pLineData; 
//		pLineData = NULL; 
//	} 
//		 
//	if(pLineTemp) 
//	{ 
//		delete pLineTemp; 
//		pLineTemp = NULL; 
//	} 
}