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; }
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; }
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; }
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; }
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(); }
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; }