📄 bjackview.cpp
字号:
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 + -