示例#1
0
文件: 7zIn.cpp 项目: 0963682490/omaha
void CInArchive::ReadUnpackInfo(
    const CObjectVector<CByteBuffer> *dataVector,
    CObjectVector<CFolder> &folders)
{
  WaitAttribute(NID::kFolder);
  CNum numFolders = ReadNum();

  {
    CStreamSwitch streamSwitch;
    streamSwitch.Set(this, dataVector);
    folders.Clear();
    folders.Reserve(numFolders);
    for (CNum i = 0; i < numFolders; i++)
    {
      folders.Add(CFolder());
      GetNextFolderItem(folders.Back());
    }
  }

  WaitAttribute(NID::kCodersUnpackSize);

  CNum i;
  for (i = 0; i < numFolders; i++)
  {
    CFolder &folder = folders[i];
    CNum numOutStreams = folder.GetNumOutStreams();
    folder.UnpackSizes.Reserve(numOutStreams);
    for (CNum j = 0; j < numOutStreams; j++)
      folder.UnpackSizes.Add(ReadNumber());
  }

  for (;;)
  {
    UInt64 type = ReadID();
    if (type == NID::kEnd)
      return;
    if (type == NID::kCRC)
    {
      CBoolVector crcsDefined;
      CRecordVector<UInt32> crcs;
      ReadHashDigests(numFolders, crcsDefined, crcs);
      for (i = 0; i < numFolders; i++)
      {
        CFolder &folder = folders[i];
        folder.UnpackCRCDefined = crcsDefined[i];
        folder.UnpackCRC = crcs[i];
      }
      continue;
    }
    SkipData();
  }
}
示例#2
0
			//////////////////////////////////////////////////////////////////////////
			//																	    //
			//////////////////////////////////////////////////////////////////////////
			// Create a new folder in the specified item.
			QTreeWidgetItem *CMainWindow::CreateFolder(QTreeWidgetItem *p_pItem, const QDir &p_oPath)
			{
				// Retrieves parent folder.
				CFolder *pParentFolder = p_pItem->data(0, Qt::UserRole).value<CFolder*>();
				CFolder *pFolder = SAM_NEW CFolder(p_oPath, pParentFolder);
				pParentFolder->AddFolder(pFolder);

				QVariant oData = qVariantFromValue<CFolder*>(pFolder);

				QTreeWidgetItem *pItem = new QTreeWidgetItem();				
				pItem->setIcon(0, QIcon(QStringLiteral(":/data/32x32/directory.png")));
				pItem->setFlags(pItem->flags() | Qt::ItemIsEditable);
				pItem->setData(0, Qt::UserRole, oData);
				pItem->setText(0, p_oPath.dirName());
				p_pItem->addChild(pItem);
				ui->projectsTreeWidget->setCurrentItem(pItem);

				return pItem;
			}