OSDN Git Service

CheckArchive()の際にデータをキャッシュしておき、その後のOpenArchive()で同じ書庫を開くよう要求された場合にはキャッシュデータを流用するように変更...
authorsirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Sun, 4 Oct 2009 01:52:16 +0000 (01:52 +0000)
committersirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Sun, 4 Oct 2009 01:52:16 +0000 (01:52 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/tpi/tpi@20 9df91469-1e22-0410-86e7-ea8537beb833

src/plugin/cuiWrapper/cuiWrapper.cpp

index b5af0bd..174128e 100644 (file)
@@ -47,6 +47,7 @@ struct g_LibInfo
 }      g_LibInfo;\r
 \r
 TPI_PROC g_prProc;\r
+wxString g_szCurrentArchive;\r
 wxArrayString g_asOutput;\r
 \r
 //******************************************************************************\r
@@ -323,15 +324,16 @@ int __stdcall CheckArchive
 //             if (asExt[i].IsSameAs(fnArchive.GetExt(), false))\r
                if (fnArchive.GetFullName().EndsWith(wxT('.') + asExt[i]))\r
                {\r
+                       // \8aJ\82¢\82Ä\8am\94F\81B\90æ\8ds\82µ\82Ä\83f\81[\83^\82ð\8eæ\93¾\82µ\82Ä\82¨\82­\81B\r
+                       OpenArchive(_szArcName, NULL);\r
+\r
                        // \91Î\89\9e\81B\r
                        if (_nFileCount != NULL)\r
                        {\r
-                               // \83t\83@\83C\83\8b\90\94\82Í\93K\93\96\82É\81B\r
-                               * _nFileCount = 1;\r
+                               // \83t\83@\83C\83\8b\90\94\82Í\91½\82ß\82É\8eæ\82Á\82Ä\82¨\82­\81B\r
+                               * _nFileCount = g_asOutput.Count();\r
                        }\r
-\r
-                       // \8eÀ\8ds\82µ\82Ä\8am\94F\81B\r
-                       return myExecute(g_LibInfo.szExeFile + wxT(" ") + MakeCommandLineSend(g_LibInfo.node.GetPropVal(wxT("list"), wxEmptyString), _szArcName, NULL, NULL, wxEmptyString), NULL, wxEmptyString);\r
+                       return TPI_ERROR_SUCCESS;\r
                }\r
        }\r
 \r
@@ -344,13 +346,20 @@ int __stdcall OpenArchive
        void * * _hArchive\r
 )\r
 {\r
-       wxString szOutput;\r
-       if (myExecute(g_LibInfo.szExeFile + wxT(" ") + MakeCommandLineSend(g_LibInfo.node.GetPropVal(wxT("list"), wxEmptyString), _szArcName, NULL, NULL, wxEmptyString), & szOutput, wxEmptyString) != TPI_ERROR_SUCCESS)\r
+       if (g_szCurrentArchive != _szArcName)\r
        {\r
-               return TPI_ERROR_U_USE_LIBRARY;\r
+               wxString szOutput;\r
+               if (myExecute(g_LibInfo.szExeFile + wxT(" ") + MakeCommandLineSend(g_LibInfo.node.GetPropVal(wxT("list"), wxEmptyString), _szArcName, NULL, NULL, wxEmptyString), & szOutput, wxEmptyString) != TPI_ERROR_SUCCESS)\r
+               {\r
+                       return TPI_ERROR_U_USE_LIBRARY;\r
+               }\r
+               g_szCurrentArchive = _szArcName;\r
+               g_asOutput = ::wxStringTokenize(szOutput, wxT("\r\n"));\r
+       }\r
+       if (_hArchive != NULL)\r
+       {\r
+               * _hArchive = & g_asOutput;\r
        }\r
-       g_asOutput = ::wxStringTokenize(szOutput, wxT("\r\n"));\r
-       * _hArchive = & g_asOutput;\r
        return g_asOutput.Count() == 0 ? TPI_ERROR_UNDEFINED : TPI_ERROR_SUCCESS;\r
 }\r
 \r