コード例 #1
0
ファイル: newarc.Module.cpp プロジェクト: FarGroup/FarManager
int ArchiveModule::Delete(
		HANDLE hArchive,
		const ArchiveItemArray& items
		)
{
	DeleteStruct DS;

	DS.hArchive = hArchive;
	DS.pItems = items.data();
	DS.uItemsNumber = items.count();

	if ( m_pfnModuleEntry (FID_DELETE, (void*)&DS) == NAERROR_SUCCESS )
		return DS.nResult;

	return RESULT_ERROR;
}
コード例 #2
0
ファイル: newarc.Module.cpp プロジェクト: FarGroup/FarManager
int ArchiveModule::Test(
		HANDLE hArchive,
		const ArchiveItemArray& items
		)
{
	TestStruct TS;

	TS.hArchive = hArchive;
	TS.pItems = items.data();
	TS.uItemsNumber = items.count();

	if ( m_pfnModuleEntry(FID_TEST, (void*)&TS) == NAERROR_SUCCESS )
		return TS.nResult;

	return RESULT_ERROR;
}
コード例 #3
0
ファイル: newarc.Module.cpp プロジェクト: FarGroup/FarManager
int ArchiveModule::Extract(
		HANDLE hArchive,
		const ArchiveItemArray& items, 
		const TCHAR* lpDestDiskPath, 
		const TCHAR* lpPathInArchive
		)
{
	ExtractStruct ES;

	ES.hArchive = hArchive;
	ES.pItems = items.data();
	ES.uItemsNumber = items.count();
	ES.lpDestPath = lpDestDiskPath;
	ES.lpCurrentPath = lpPathInArchive;

	if ( m_pfnModuleEntry (FID_EXTRACT, (void*)&ES) == NAERROR_SUCCESS )
		return ES.nResult;

	return RESULT_ERROR;
}
コード例 #4
0
ファイル: newarc.Module.cpp プロジェクト: FarGroup/FarManager
int ArchiveModule::AddFiles(
		HANDLE hArchive,
		const ArchiveItemArray& items,
		const TCHAR* lpSourceDiskPath,
		const TCHAR* lpPathInArchive,
		const TCHAR* lpConfig
		)
{
	AddStruct AS;

	AS.hArchive = hArchive;
	AS.lpSourcePath = lpSourceDiskPath;
	AS.lpCurrentPath = lpPathInArchive;
	AS.pItems = items.data();
	AS.uItemsNumber = items.count();
	AS.pConfig = lpConfig;

	if ( m_pfnModuleEntry (FID_ADD, (void*)&AS) == NAERROR_SUCCESS )
		return AS.nResult;

	return RESULT_ERROR;
}
コード例 #5
0
ファイル: newarc.Panel.cpp プロジェクト: CyberShadow/FAR
void ArchivePanel::GetArchiveItemsToProcess(
		const PluginPanelItem *pPanelItems,
		int nItemsNumber,
		ArchiveItemArray &items
		)
{
	m_OS.uTotalFiles = 0;
	m_OS.uTotalSize = 0;

	for (int i = 0; i < nItemsNumber; i++)
	{
		const FAR_FIND_DATA *data = &pPanelItems[i].FindData;

		ArchiveTreeNode* node = (ArchiveTreeNode*)pPanelItems[i].UserData;

		//ад и кромешный пиздец. отдаем обратно модулю то, что он сам и навыделял. т.е. хоть эти ArchiveItem и новые, данные в них 
		//старые. т.е. удалять их нельзя ни при каких обстоятельствах!

		m_OS.uTotalSize += GetArchiveItemsToProcessFromNode(node, items);
	}

	m_OS.uTotalFiles = items.count(); 
}
コード例 #6
0
ファイル: newarc.Panel.cpp プロジェクト: CyberShadow/FAR
int ArchivePanel::pProcessHostFile(
		const PluginPanelItem *PanelItem,
		int ItemsNumber,
		int OpMode
		)
{
	int nMenuItem = -1;

	if ( (nMenuItem = mnuChooseOperation()) == -1 )
		return FALSE;

	int nCommand = -1;

	switch ( nMenuItem ) {

	case MENU_OPERATION_TEST:
		nCommand = COMMAND_TEST;
		break;

	case MENU_OPERATION_ADD_ARCHIVE_COMMENT:
		nCommand = COMMAND_ARCHIVE_COMMENT;
		break;

	case MENU_OPERATION_ADD_FILE_COMMENT:
		nCommand = COMMAND_FILE_COMMENT;
		break;

	case MENU_OPERATION_CONVERT_TO_SFX:
		nCommand = COMMAND_CONVERT_TO_SFX;
		break;

	case MENU_OPERATION_RECOVER:
		nCommand = COMMAND_RECOVER;
		break;

	case MENU_OPERATION_ADD_RECOVERY_RECORD:
		nCommand = COMMAND_ADD_RECOVERY_RECORD;
		break;

	case MENU_OPERATION_LOCK:
		nCommand = COMMAND_LOCK;
		break;
	};

	if ( nCommand == -1 )
		return FALSE;
	
	string strCommand;

	bool bCommandEnabled = GetCommand(nCommand, strCommand);
	bool bInternalTest = (nCommand == COMMAND_TEST) && m_pArchive->QueryCapability(AFF_SUPPORT_INTERNAL_TEST);

	if ( bCommandEnabled || bInternalTest )
	{
		ArchiveItemArray items;

		if ( OptionIsOn(OpMode, OPM_TOPLEVEL) )
		{
			ArchiveTreeNode* root = m_pArchive->GetRoot();

			m_OS.uTotalSize = GetArchiveItemsToProcessFromNode(root, items);
			m_OS.uTotalFiles = items.count();
		}
		else
			GetArchiveItemsToProcess(PanelItem, ItemsNumber, items);

		int nOperationResult = RESULT_ERROR;

		if ( bInternalTest )
			nOperationResult = Test(items);

		if ( bCommandEnabled && (nOperationResult == RESULT_ERROR) )
		{
			ExecuteStruct ES(items);

			ES.lpCommand = strCommand;

			nOperationResult = m_pArchive->ExecuteAsOperation(bInternalTest?OPERATION_TEST:OPERATION_OTHER, ExecuteCommand, &ES); 
		}

		return nOperationResult == RESULT_SUCCESS;
	}

	return FALSE;
}