OSDN Git Service

圧縮レベル、Solid圧縮、ヘッダ暗号化の指定に対応。
authorsirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Fri, 19 Feb 2010 03:49:58 +0000 (03:49 +0000)
committersirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Fri, 19 Feb 2010 03:49:58 +0000 (03:49 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/tpi/tpi@232 9df91469-1e22-0410-86e7-ea8537beb833

src/plugin/7zArc/7zArc.cpp

index fa05b62..b6fd37b 100644 (file)
@@ -75,7 +75,6 @@ int GetFileInformation2(void * _hArchive, TPI_FILEINFO * _fiInfo, unsigned int n
        hArc->GetProperty(nIndex, kpidATime, & prop);\r
        NWindows::NTime::FileTimeToUnixTime(prop.filetime, t);\r
        _fiInfo->tmAccess.Set((time_t) t);\r
-//     _fiInfo->uOSType        = hdInfo.HostOS;\r
        hArc->GetProperty(nIndex, kpidPath, & prop);\r
        if (prop.vt == VT_BSTR)\r
        {\r
@@ -142,7 +141,7 @@ int __stdcall GetFormatInformation2(TPI_FORMATINFO * _fiInfo, unsigned int & nIn
                _fiInfo->szSuffix     = wxT("bz2");\r
                _fiInfo->llSupportedCommand |= TPI_COMMAND_CREATE;\r
                _fiInfo->fArchive = false;\r
-               _fiInfo->sCompressLevelMin = 0;\r
+               _fiInfo->sCompressLevelMin = 1;\r
                _fiInfo->sCompressLevelMax = 9;\r
        }\r
 #if 0\r
@@ -226,7 +225,7 @@ int __stdcall GetFormatInformation2(TPI_FORMATINFO * _fiInfo, unsigned int & nIn
                _fiInfo->szSuffix     = wxT("gz");\r
                _fiInfo->llSupportedCommand |= TPI_COMMAND_CREATE;\r
                _fiInfo->fArchive = false;\r
-               _fiInfo->sCompressLevelMin = 0;\r
+               _fiInfo->sCompressLevelMin = 1;\r
                _fiInfo->sCompressLevelMax = 9;\r
        }\r
        else\r
@@ -887,6 +886,7 @@ int __stdcall Command
        case TPI_COMMAND_CREATE:\r
 //     case TPI_COMMAND_ADD:\r
        {\r
+               // 入力リストを作成。\r
                CObjectVector<NWindows::NFile::NFind::CFileInfoW> fiItems;\r
                for (unsigned int i = 0; i < _szFiles.GetCount(); i++)\r
                {\r
@@ -900,6 +900,7 @@ int __stdcall Command
                        fiItems.Add(fi);\r
                }\r
 \r
+               // 書庫を作成。\r
                COutFileStream * outFileStreamSpec = new COutFileStream;\r
                CMyComPtr<IOutStream> outFileStream = outFileStreamSpec;\r
                if (! outFileStreamSpec->Create(_szArcName.c_str(), false))\r
@@ -907,12 +908,61 @@ int __stdcall Command
                        return TPI_ERROR_IO_ARC_OPEN;\r
                }\r
 \r
+               // エンジンを読み込み。\r
                IOutArchive * hArc;\r
                if (((unsigned int (__stdcall *)(const GUID *, const GUID *, void **)) g_fpProc)(& guidList[g_llEngineId.ToULong()], & IID_IOutArchive, (void **) & hArc) != S_OK)\r
                {\r
                        return TPI_ERROR_ARC_UNSUPPORTED;\r
                }\r
 \r
+               // 形式情報を取得。\r
+               TPI_FORMATINFO fiInfo;\r
+               unsigned int nIndex = g_llEngineId.ToULong();\r
+               GetFormatInformation2(& fiInfo, nIndex);\r
+\r
+               // パラメータを設定。\r
+               ISetProperties * setProp;\r
+               if (hArc->QueryInterface(IID_ISetProperties, (void **) & setProp) == S_OK)\r
+               {\r
+                       CRecordVector<const wchar_t *> szProps;\r
+                       NWindows::NCOM::CPropVariant propValues[100];\r
+                       wxString szProp;\r
+                       // 圧縮レベル。\r
+                       if (fiInfo.sCompressLevelMin != fiInfo.sCompressLevelMax)\r
+                       {\r
+                               szProp = wxString::Format(wxT("x%d"), _swInfo->sCompressLevel);\r
+                               szProps.Add(szProp.c_str());\r
+                       }\r
+                       // Solid圧縮。\r
+                       if (fiInfo.fSolid)\r
+                       {\r
+                               propValues[szProps.Size()] = _swInfo->fSolid;\r
+                               szProps.Add(wxT("s"));\r
+                       }\r
+                       // ヘッダ圧縮。\r
+/*                     if (fiInfo.fCompressHeader)\r
+                       {\r
+                               propValues[szProps.Size()] = _swInfo->fCompressHeader;\r
+                               szProps.Add(wxT("hc"));\r
+                       }\r
+*/                     // ヘッダ暗号化。\r
+                       if (fiInfo.fEncryptHeader)\r
+                       {\r
+                               propValues[szProps.Size()] = _swInfo->fEncryptHeader;\r
+                               szProps.Add(wxT("he"));\r
+                       }\r
+\r
+//                     szProp = wxString::Format(wxT("m"));\r
+//                     propValues[szProps.Size()] = L"Deflate";\r
+//                     szProps.Add(szProp.c_str());\r
+\r
+//                     szProp = wxString::Format(wxT("fb%d"), );\r
+//                     szProps.Add(szProp.c_str());\r
+\r
+                       setProp->SetProperties(& szProps.Front(), propValues, szProps.Size());\r
+               }\r
+\r
+               // 更新処理を実行。\r
                CArchiveUpdateCallback * updateCallbackSpec = new CArchiveUpdateCallback;\r
                CMyComPtr<IArchiveUpdateCallback2> updateCallback(updateCallbackSpec);\r
                updateCallbackSpec->fiItems = & fiItems;\r