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

📄 bjackview.cpp

📁 手机文件浏览器 Here are the sources to SMan v1.2c 1.2 is a major jump from v1.1. You will see this from the
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		delete selArray;
		selArray = NULL;
	}
	// Make a copy of the selection indexes so we can track the bluebeam progress
	selArray = new (ELeave) CArrayFixFlat<TInt>(tempUiObj->iFileView->cFileListBox->SelectionIndexes()->Count());
	tempUiObj->iFileView->cFileListBox->View()->GetSelectionIndexesL(selArray);

	logHelper->localAutoSave = &fakeAutoSaveFlag;
	beamerStatus = isStarting;
	if (selectDevice() == KErrNone)
		doBeam();
	else
		beamerStatus = isIdle;
}

TInt CBlueBeam::selectDevice(void)
{
	if (beamerProtocol == protocolBluetooth)
	{
		// Service filter changed because some users were reporting problems of SMan not being able to find their OBEX server.
		// I think the OBEX server's implementation is the issue here.
		
		//CQBTUISelectDialog* selectDialog = new (ELeave) CQBTUISelectDialog(devAddress, devName, devClass, CQBTUISelectDialog::EQBTDeviceFilterAll, EMajorServiceObjectTransfer, EFalse);
		CQBTUISelectDialog* selectDialog = new (ELeave) CQBTUISelectDialog(devAddress, devName, devClass, CQBTUISelectDialog::EQBTDeviceFilterAll, -1, EFalse);
		if (selectDialog->LaunchSingleSelectDialogLD() == 3)
		{
			return KErrNone;
		}
		else
		{
			return KErrCancel;
		}
	} 
	else if (beamerProtocol == protocolIrDA)
	{
		RSocketServ rSocketServ;
		TProtocolDesc protoDesc;
		
		rSocketServ.Connect();
		if ((rSocketServ.FindProtocol(_L("IrTinyTP"), protoDesc)) != KErrNone)
		{
			rSocketServ.Close();
			CEikonEnv::Static()->InfoMsg(R_TBUF_BEAMER_IRDAMISSING);
			User::Leave(0);
		}
		RHostResolver hostResolver;
		if (hostResolver.Open(rSocketServ,protoDesc.iAddrFamily,protoDesc.iProtocol) != KErrNone)
		{
			CEikonEnv::Static()->InfoMsg(R_TBUF_BEAMER_IRDAHRERR);
			rSocketServ.Close();
			return KErrCancel;
		}
				
		THostName hostName;
		TInt ret;
		ret = hostResolver.GetByName(hostName, nameEntry); // Finds all IrLAP stations.
		hostResolver.Close();
		rSocketServ.Close();
		if (ret == KErrNone)
		{
			devName.Copy(nameEntry().iName);
			return KErrNone;
		}
		else
		{
			CEikonEnv::Static()->InfoMsg(R_TBUF_BEAMER_IRDANODEVICE);
			return KErrCancel;
		}
	}
	else
		return KErrCancel;
}

void CBlueBeam::doBeam(void)
{
	if (beamerProtocol == protocolBluetooth)
	{
		// Find OBEX
		iStatus = KRequestPending;
		beamerStatus = isOBEXSearch;
		obexRetries = OBEX_RETRIES;
		obexSearcher.start(&iStatus, &devAddress);
	}
	bluebeamLogDialog = new (ELeave) CBluebeamLogDialog(logHelper);
	bluebeamLogDialog->ExecuteLD(R_DIALOG_BLUEBEAMLOG);
	selectedFiles = static_cast<CSMan2AppUi*>(CEikonEnv::Static()->EikAppUi())->iFileView->cFileListBox->SelectionIndexes()->Count();
	logHelper->logBuffer = logBuffer;
	
	if (beamerProtocol == protocolBluetooth)
	{
		HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_OBEXSEARCH);
		logWithName(dataBuffer);
		delete dataBuffer;

		/*
		TBuf<30> txt;
		CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_OBEXSEARCH);
		logWithName(&txt);
		*/
		SetActive();
	}
	else if (beamerProtocol == protocolIrDA)
	{
		// IrDA doesn't need OBEX search so we can start beaming files immediately.
		// However, the obex client is not ready yet so we must manually initialize it
		// first
		
		HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_OBEXCONNECT);
		logWithName(dataBuffer);
		delete dataBuffer;
		
		/*
		TBuf<30> txt;
		CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_OBEXCONNECT);
		logWithName(&txt);
		*/
		
		obexIRProtoInfo.iAttributeName.Copy(_L("IrDA:TinyTP:LsapSel"));
		obexIRProtoInfo.iClassName.Copy(_L("OBEX"));
		obexIRProtoInfo.iAddr.Cast(nameEntry().iAddr);
		obexIRProtoInfo.iTransport.Copy(_L("IrTinyTP"));
		if (obexClient)
		{
			delete obexClient;
			obexClient = NULL;
		}
		obexClient = CObexClient::NewL(obexIRProtoInfo);
		beamerStatus = isOBEXConnect;
		iStatus = KRequestPending;

		// Start OBEX connect
		obexClient->Connect(iStatus);
		SetActive();
	}
}

void CBlueBeam::sendOBEXFile(void)
{
	TPtrC tempText, selectedFile, fileType;
	
	CSMan2AppUi *tempUiObj = STATIC_CAST(CSMan2AppUi*, CEikonEnv::Static()->EikAppUi());
	tempText.Set(tempUiObj->iFileView->cFileListBox->Model()->ItemTextArray()->MdcaPoint(tempUiObj->iFileView->cFileListBox->SelectionIndexes()->At(selectedFiles)));
	
	// Is this a folder? We don't beam folders. Sorry!
	TextUtils::ColumnText(fileType, 1, &tempText);
	if (fileType.Compare(_L("<dir>")) == 0)
	{
		HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_SKIPFOLDER);
		dataBuffer = dataBuffer->ReAllocL(dataBuffer->Length() + KMaxFileName);
		
		//TBuf<KMaxFileName + 20> txt;
		//CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_SKIPFOLDER);
		
		TextUtils::ColumnText(selectedFile, 0, &tempText);
		currentFileName.Copy(tempUiObj->iFileView->currentPath);
		currentFileName.Append(selectedFile);

		//txt.Append(currentFileName);
		//logHelper->updateLog(&txt, 0, CLogger::logAll);
		dataBuffer->Des().Append(currentFileName);
		logHelper->updateLog(dataBuffer, 0, CLogger::logAll);
		
		delete dataBuffer;

		iStatus = KErrNone;
		beamerStatus = isOBEXNextFile;
		// Get next item
		After(1);
		return;
	}

	if (obexFile)
	{
		delete obexFile;
		obexFile = NULL;
	}
	obexFile = CObexFileObject::NewL(TPtrC(NULL, 0));
	
	TextUtils::ColumnText(selectedFile, 0, &tempText);
	currentFileName.Copy(tempUiObj->iFileView->currentPath);
	currentFileName.Append(selectedFile);
	
	TRAPD(err, obexFile->InitFromFileL(currentFileName));
	if (err)
	{	
		HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_FILEOPENERR);
		dataBuffer = dataBuffer->ReAllocL(dataBuffer->Length() + KMaxFileName);
		CEikonEnv::Static()->InfoMsg(*dataBuffer);
		dataBuffer->Des().Append(currentFileName);
		logHelper->updateLog(dataBuffer, 0, CLogger::logAll);
		delete dataBuffer;

		/*
		TBuf<KMaxFileName + 20> txt;
		CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_FILEOPENERR);
		CEikonEnv::Static()->InfoMsg(txt);
		txt.Append(currentFileName);
		logHelper->updateLog(&txt, 0, CLogger::logAll);
		*/
		
		iStatus = KErrNone;
		beamerStatus = isOBEXNextFile;
		delete obexFile;
		obexFile = NULL;
		// On with the next file
		After(1);
	}
	else
	{	
		HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_SENDING);
		dataBuffer = dataBuffer->ReAllocL(dataBuffer->Length() + KMaxFileName);
		dataBuffer->Des().Append(currentFileName);
		logWithName(dataBuffer);
		delete dataBuffer;

		/*
		TBuf<KMaxFileName + 11> txt;
		CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_SENDING);
		txt.Append(currentFileName);
		logWithName(&txt);
		*/
		
		iStatus = KRequestPending;
		beamerStatus = isOBEXSend;
		obexClient->Put(*obexFile, iStatus);
		SetActive();
	}
}

void CBlueBeam::logWithName(const TDesC *buffer)
{
	HBufC *dataBuffer = HBufC::NewL(buffer->Length() + devName.Length() + KMaxFileName);
	dataBuffer->Des().Copy(devName);
	dataBuffer->Des().Append(_L(" - "));
	dataBuffer->Des().Append(*buffer);
	logHelper->updateLog(dataBuffer, 0, CLogger::logAll);
	delete dataBuffer;
	
	/*
	TBuf<KMaxFileName + 0x100 + 30> txt;
	txt.Copy(devName);
	txt.Append(_L(" - "));
	txt.Append(*buffer);
	logHelper->updateLog(&txt, 0, CLogger::logAll);
	*/
}

void CBlueBeam::RunL()
{
	//TBuf<50> txt;
	
	if (beamerStatus == isOBEXSearch)
	{
		// I could have passed this via iStatus too.
		if (obexSearcher.RFCOMMPort > -1)
		{
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_OBEXCONNECT);
			logWithName(dataBuffer);
			delete dataBuffer;
			
			/*
			CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_OBEXCONNECT);
			logWithName(&txt);
			*/
			
			obexBTProtoInfo.iTransport.Copy(_L("RFCOMM"));
			obexBTProtoInfo.iAddr.SetBTAddr(devAddress);
			obexBTProtoInfo.iAddr.SetPort(obexSearcher.RFCOMMPort);
			if (obexClient)
			{
				delete obexClient;
				obexClient = NULL;
			}
			obexClient = CObexClient::NewL(obexBTProtoInfo);
			beamerStatus = isOBEXConnect;
			iStatus = KRequestPending;

			// Start OBEX connect
			obexClient->Connect(iStatus);
			SetActive();
		}
		else
		{
			if (obexRetries > 0)
			{
				HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_OBEXRETRY);
				logWithName(dataBuffer);
				delete dataBuffer;
				
				/*
				CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_OBEXRETRY);
				logWithName(&txt);
				*/
				
				obexRetries--;
				iStatus = KRequestPending;
				beamerStatus = isOBEXSearch;
				obexSearcher.start(&iStatus, &devAddress);
				SetActive();
			}
			else
			{
				HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_OBEXSEARCHERR);
				logWithName(dataBuffer);
				delete dataBuffer;

				/*
				CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_OBEXSEARCHERR);
				logWithName(&txt);
				*/
				
				beamerStatus = isIdle;
			}
		}			
	}
	else if ((beamerStatus == isOBEXConnect) || (beamerStatus == isOBEXNextFile))
	{
		if (iStatus == KErrNone)
		{
			selectedFiles--;
			if (selectedFiles >= 0)
				sendOBEXFile();
			else
			{
				HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_OBEXDISCONNECT);
				logWithName(dataBuffer);
				delete dataBuffer;

				/*
				CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_OBEXDISCONNECT);
				logWithName(&txt);
				*/

				iStatus = KRequestPending;
				beamerStatus = isOBEXDisconnect;
				obexClient->Disconnect(iStatus);
				SetActive();
			}
		}
		else
		{
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_OBEXCONNECTERR);
			logWithName(dataBuffer);
			delete dataBuffer;
		
			/*
			CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_OBEXCONNECTERR);
			logWithName(&txt);
			*/
			beamerStatus = isIdle;
		}
	}
	else if (beamerStatus == isOBEXSend)
	{
		if (iStatus == KErrNone)
		{
			// Unmark the file in the filebrowser
			static_cast<CSMan2AppUi*>(CEikonEnv::Static()->EikAppUi())->iFileView->cFileListBox->View()->VerticalMoveToItemL(selArray->At(selectedFiles), CListBoxView::EDisjointSelection);
			selectedFiles--;
			if (selectedFiles >= 0)
			{
				sendOBEXFile();
				return;
			}
			else
			{
				HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_OBEXDISCONNECT);
				logWithName(dataBuffer);
				delete dataBuffer;

				/*
				CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_OBEXDISCONNECT);
				logWithName(&txt);
				*/
				
				if (obexFile)
				{
					delete obexFile;
					obexFile = NULL;
				}
			}
		}
		else
		{
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_OBEXPUTERR);
			logWithName(dataBuffer);
			delete dataBuffer;

			/*
			CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_OBEXPUTERR);
			logWithName(&txt);
			*/
		}
		iStatus = KRequestPending;
		beamerStatus = isOBEXDisconnect;
		obexClient->Disconnect(iStatus);
		SetActive();
	}
	else if (beamerStatus == isOBEXDisconnect)
	{
		if (iStatus == KErrNone)
		{
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_MISC_DONE);
			logWithName(dataBuffer);
			delete dataBuffer;

			/*
			CEikonEnv::Static()->ReadResource(txt, R_TBUF_MISC_DONE);
			logWithName(&txt);
			*/
		}
		else
		{
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_OBEXDISCONNECTERR);
			logWithName(dataBuffer);
			delete dataBuffer;
		
			/*
			CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_OBEXDISCONNECTERR);
			logWithName(&txt);
			*/
		}
		beamerStatus = isIdle;
	}

	// Cleanup!
	if (beamerStatus == isIdle)
	{
		if (logHelper->logDialog)
		{
			bluebeamLogDialog->ButtonGroupContainer().DimCommand(EEikBidYes, EFalse);
			bluebeamLogDialog->ButtonGroupContainer().DimCommand(EEikBidOk, ETrue);	
		}
		if (selArray)
		{
			delete selArray;
			selArray = NULL;
		}
		if (obexFile)
		{
			delete obexFile;
			obexFile = NULL;
		}
		if (obexClient)
		{
			delete obexClient;
			obexClient = NULL;
		}
	}
}

void CBlueBeam::stopBeam()
{
	if (IsActive())
	{
		if (obexClient)
			obexClient->Abort();			

		if (beamerStatus != isOBEXNextFile)
		{
			if (obexClient)
			{
				delete obexClient;
				obexClient = NULL;
			}
			if (obexFile)
			{
				delete obexFile;
				obexFile = NULL;
			}
		}		

		beamerStatus = isIdle;

		// This is kludgy but it works.

		TRequestStatus* tempStatus;		
		tempStatus = &iStatus;
		User::RequestComplete(tempStatus, KErrNone);
		User::WaitForRequest(iStatus);

		HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BEAMER_CANCELLED);
		logWithName(dataBuffer);
		delete dataBuffer;

		/*
		TBuf<50> txt;
		CEikonEnv::Static()->ReadResource(txt, R_TBUF_BEAMER_CANCELLED);
		logWithName(&txt);
		*/
	}
	else
		beamerStatus = isIdle;
}

void CBlueBeam::DoCancel()
{
	stopBeam();
}

⌨️ 快捷键说明

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