int nMode;\r
bool fTriedPassword;\r
TPI_PROCESSINFO piInfo;\r
- wxULongLong_t llCurrentPos;\r
+ wxULongLong_t nCurrentPos;\r
COutFileStream * _outFileStreamSpec;\r
CMyComPtr<ISequentialOutStream> _outFileStream;\r
};\r
STDMETHODIMP CArchiveExtractCallback::SetCompleted(const wxULongLong_t * nProcessed)\r
{\r
this->piInfo.eStatus = TPI_STATUS_INPROCESS;\r
- this->piInfo.nProcessedSize = * nProcessed - this->llCurrentPos;\r
+ this->piInfo.nProcessedSize = * nProcessed - this->nCurrentPos;\r
if (g_prProc == NULL || this->piInfo.fiInfo.szStoredName.IsEmpty() || g_prProc(TPI_NOTIFY_COMMON, & this->piInfo) == TPI_CALLBACK_CONTINUE)\r
{\r
return S_OK;\r
* outStream = 0;\r
_outFileStream.Release();\r
\r
- // 現在位置を記録。\r
- this->llCurrentPos += this->piInfo.fiInfo.nUnpackedSize;\r
+ // 前のファイルの処理の終了を通知。\r
+ this->nCurrentPos += this->piInfo.fiInfo.nUnpackedSize;\r
+ this->piInfo.eMessage = TPI_MESSAGE_STATUS;\r
+ if (this->nCurrentPos != 0)\r
+ {\r
+ this->piInfo.eStatus = TPI_STATUS_ENDPROCESS;\r
+ if (g_prProc != NULL && g_prProc(TPI_NOTIFY_COMMON, & this->piInfo) != TPI_CALLBACK_CONTINUE)\r
+ {\r
+ this->nErrorCode = TPI_ERROR_D_SKIPPED;\r
+ return E_ABORT;\r
+ }\r
+ }\r
\r
// ファイルの基本情報を取得。\r
- this->piInfo.eMessage = TPI_MESSAGE_STATUS;\r
this->piInfo.eStatus = TPI_STATUS_BEGINPROCESS;\r
GetFileInformation2(this->hArc, & this->piInfo.fiInfo, nIndex);\r
this->piInfo.fnDestination = wxFileName(swInfo->fnDestinationDirectory.GetFullPath() + wxFileName::GetPathSeparator() + (swInfo->fStoreDirectoryPathes ? this->piInfo.fiInfo.fnFileName.GetPath() : (wxString) wxEmptyString), this->piInfo.fiInfo.fnFileName.GetFullName());\r
-\r
- // コールバック関数に送信。\r
if (g_prProc != NULL && g_prProc(TPI_NOTIFY_COMMON, & this->piInfo) != TPI_CALLBACK_CONTINUE)\r
{\r
this->nErrorCode = TPI_ERROR_D_SKIPPED;\r
\r
STDMETHODIMP CArchiveUpdateCallback::GetStream(unsigned int nIndex, ISequentialInStream ** inStream)\r
{\r
- // 現在位置を記録。\r
+ // 前のファイルの処理の終了を通知。\r
this->nCurrentPos += this->piInfo.fiInfo.nUnpackedSize;\r
+ this->piInfo.eMessage = TPI_MESSAGE_STATUS;\r
+ if (this->nCurrentPos != 0)\r
+ {\r
+ this->piInfo.eStatus = TPI_STATUS_ENDPROCESS;\r
+ if (g_prProc != NULL && g_prProc(TPI_NOTIFY_COMMON, & this->piInfo) != TPI_CALLBACK_CONTINUE)\r
+ {\r
+ this->nErrorCode = TPI_ERROR_D_SKIPPED;\r
+ return E_ABORT;\r
+ }\r
+ }\r
\r
// ファイルの基本情報を取得。\r
NWindows::NCOM::CPropVariant prop;\r
this->piInfo.fiInfo.nFileId = nIndex;\r
this->piInfo.fiInfo.fnFileName = wxFileName(this->piInfo.fiInfo.szStoredName);\r
this->piInfo.fiInfo.fnFileName.Normalize(wxPATH_NORM_DOTS | wxPATH_NORM_ABSOLUTE | wxPATH_NORM_LONG, this->swInfo->fnDestinationDirectory.GetFullPath());\r
- this->piInfo.eMessage = TPI_MESSAGE_STATUS;\r
this->piInfo.eStatus = TPI_STATUS_BEGINPROCESS;\r
this->piInfo.fnDestination = wxFileName(this->piInfo.fiInfo.szStoredName);\r
\r