[Date Prev][Date Next][Thread Prev][Thread Next][Thread Index]
[XaraXtreme-commits] Commit Complete
Commit by : gerry
Repository : xara
Revision : 972
Date : Mon May 8 10:15:25 BST 2006
Changed paths:
M /Trunk/XaraLX/wxOil/camview.cpp
M /Trunk/XaraLX/wxOil/xpoilflt.cpp
M /Trunk/XaraLX/wxOil/xpoilflt.h
Fixes for File/Close
Diff:
Index: Trunk/XaraLX/wxOil/xpoilflt.cpp
===================================================================
--- Trunk/XaraLX/wxOil/xpoilflt.cpp (revision 971)
+++ Trunk/XaraLX/wxOil/xpoilflt.cpp (revision 972)
@@ -774,6 +774,13 @@
return(FALSE);
#endif
+ m_FilterPath.SetPathName(_T("/home/gerry/src/XPFilter/debugu/XPFilter"));
+
+ // This should be set to some sensible path but I've hardcoded it for now
+ // We should change to making ~/.XaraLX into a directory and store the main config
+ // file and these filter config files in there
+ m_XMLFile.SetPathName(_T("~/.XPFilters/XPFilter.xml"));
+
// Size = 32;
// TCHAR Exts[32];
// if (rConfigKey.QueryValue(Exts, _T("Extensions"), &Size) != ERROR_SUCCESS)
@@ -850,7 +857,7 @@
****************************************************************************/
-INT32 PluginOILFilter::HowCompatible(PathName& Filename)
+INT32 PluginOILFilter::HowCompatible(PathName& FileName)
{
INT32 HowCompatible = 0;
@@ -865,6 +872,44 @@
return(0);
#endif
+ // Here we need to run the plugin synchronously with the following options
+ // -c -f <filename>
+
+ // Check stderr for errors
+ // Get HowCompatible from stdout
+
+ wxString sCommand;
+ // Does this need double quotes to cope with spaces in filenames?
+ sCommand.Printf(_T("%s -c -f %s"), (LPCTSTR)m_FilterPath.GetPath(), (LPCTSTR)FileName.GetPath());
+
+ wxArrayString saOutput;
+ wxArrayString saErrors;
+ int code = wxExecute(sCommand, saOutput, saErrors);
+ if (code == 0)
+ {
+ // Extract the value from saOutput
+ if (saOutput.Count() > 0)
+ {
+ INT32 Val = wxAtoi(saOutput[0]);
+ if (Val >= 0 && Val <= 10)
+ {
+ HowCompatible = Val;
+ }
+ else
+ {
+ TRACE(_T("Command '%s' returned value of %d"), sCommand.c_str(), Val);
+ }
+ }
+ else
+ {
+ TRACE(_T("Command '%s' returned no output value"), sCommand.c_str());
+ }
+ }
+ else
+ {
+ TRACE(_T("Command '%s' exited with code %d"), sCommand.c_str(), code);
+ }
+
return(HowCompatible);
}
@@ -937,9 +982,54 @@
m_pXarStream.p->AddRef();
*ppNewFile = pStreamFile; // Return the new file pointer
+
+ return(TRUE);
#endif
- return(TRUE);
+ // Here we should really run the plugin asynchronously with the following options
+ // -i -g -f <filename>
+
+ // Redirect stdout to a CCLexFile
+ // Check stderr during the Xar import and abort if an error is reported
+
+ // However to get it working quickly I shall instead:
+ // Run the plugin synchronously with the following options
+ // -i -g -f <filename> ><tempfilename>
+
+ // Check stderr for errors
+
+ // Once complete create a CCDiskFile attached to the temporary file
+ m_TempXarFile.SetPathName(_T("/tmp/xpftemp.xar"));
+
+ PathName FileName = pFile->GetPathName();
+
+ wxString sCommand;
+ // Does this need double quotes to cope with spaces in filenames?
+ sCommand.Printf(_T("%s -i -f %s > %s"), (LPCTSTR)m_FilterPath.GetPath(), (LPCTSTR)FileName.GetPath(), (LPCTSTR)m_TempXarFile.GetPath());
+
+ wxArrayString saOutput;
+ wxArrayString saErrors;
+ int code = wxExecute(sCommand, saOutput, saErrors);
+ if (code != 0)
+ {
+ TRACE(_T("Execution of '%s' failed."), sCommand.c_str());
+ // Extract error from saErrors and report it
+ return(FALSE);
+ }
+
+ CCDiskFile* pTempFile = new CCDiskFile();
+ if (pTempFile)
+ {
+ if (pTempFile->open(m_TempXarFile, ios::in | ios::binary))
+ {
+ *ppNewFile = pTempFile;
+ return(TRUE);
+ }
+
+ delete pTempFile;
+ }
+
+ return(FALSE);
}
@@ -963,10 +1053,25 @@
*ppNewFile = NULL;
+ // Here we should run the plugin asynchronously with the following options
+ // -e -g -f <filename> -x <xmlfilename>
+
+ // The xmlfilename is a path to a user and filter specific file
+ // e.g. ~/.XaraLX/filtername.xml
+ // Create a CCLexFile derived object that sends its data to stdin
+ // Check stderr during the Xar export and abort if an error is reported
+
+ // However, this will not be trivial so intsead we will just create a
+ // CCDiskFile attached to a temporary filename and run the export process
+ // in DoExport instead
+
+ // Generate a temporary file name
+ m_TempXarFile.SetPathName(_T("/tmp/xpftemp.xar"));
+
CCDiskFile* pFile = new CCDiskFile();
if (pFile)
{
- if (pFile->open(*pPath, ios::out | ios::binary | ios::trunc))
+ if (pFile->open(m_TempXarFile, ios::out | ios::binary | ios::trunc))
{
*ppNewFile = pFile;
return(TRUE);
@@ -975,6 +1080,8 @@
delete pFile;
}
+ return(FALSE);
+
PORTNOTE("other","PluginFilter COM bits removed")
#if !defined(EXCLUDE_FROM_XARALX)
if (!CreateFilterObject())
@@ -1002,8 +1109,8 @@
*ppNewFile = pStreamFile; // Return the new file pointer
+ return(TRUE);
#endif
- return(TRUE);
}
@@ -1055,6 +1162,39 @@
}
#endif
+ // Here we need to run the plugin synchronously with the following options
+ // -p -f <filename> -x <xmlfilename>
+
+ // The xmlfilename is a path to a user and filter specific file
+ // e.g. ~/.XaraLX/filtername.xml
+
+ // The XML is returned via the file
+
+ // Does this need double quotes to cope with spaces in filenames?
+ wxString sCommand;
+ sCommand.Printf(_T("%s -p -f %s -x %s"), (LPCTSTR)m_FilterPath.GetPath(), (LPCTSTR)pPath->GetPath(), (LPCTSTR)m_XMLFile.GetPath());
+
+ wxArrayString saOutput;
+ wxArrayString saErrors;
+ int code = wxExecute(sCommand, saOutput, saErrors);
+
+ for (INT32 i = 0; i < saErrors.GetCount(); i++)
+ {
+ TRACE(_T("stderr: %s"), saErrors[i].c_str());
+ }
+
+ if (code == 0)
+ {
+ // Change this once XML stuff is working
+// BuildCapabilityTree(bsXML, pCapTree);
+ }
+ else
+ {
+ TRACE(_T("Command '%s' exited with code %d"), sCommand.c_str(), code);
+
+ // Get error message from saErrors
+ }
+
return(TRUE);
}
@@ -1103,6 +1243,37 @@
}
#endif
+ // Here we should just need to wait for the process started in GetExportFile
+ // to finish
+ // Check stderr for errors and progress
+
+ // However for now we will instead
+ // Run the plugin synchronously with the following options
+ // -e -g -f <filename> -x <xmlfilename> < <tempfilename>
+
+ // The xmlfilename is a path to a user and filter specific file
+ // e.g. ~/.XaraLX/filtername.xml
+
+ // Check stderr for errors
+
+ wxString sCommand;
+ // Does this need double quotes to cope with spaces in filenames?
+ sCommand.Printf(_T("%s -e -f %s -x %s < %s"), (LPCTSTR)m_FilterPath.GetPath(), (LPCTSTR)pPath->GetPath(), (LPCTSTR)m_XMLFile.GetPath(), (LPCTSTR)m_TempXarFile.GetPath());
+
+ wxArrayString saOutput;
+ wxArrayString saErrors;
+ int code = wxExecute(sCommand, saOutput, saErrors);
+ for (INT32 i = 0; i < saErrors.GetCount(); i++)
+ {
+ TRACE(_T("stderr: %s"), saErrors[i].c_str());
+ }
+ if (code != 0)
+ {
+ TRACE(_T("Execution of '%s' failed."), sCommand.c_str());
+ // Extract error from saErrors and report it
+ return(FALSE);
+ }
+
return(TRUE);
}
Index: Trunk/XaraLX/wxOil/xpoilflt.h
===================================================================
--- Trunk/XaraLX/wxOil/xpoilflt.h (revision 971)
+++ Trunk/XaraLX/wxOil/xpoilflt.h (revision 972)
@@ -185,7 +185,7 @@
BOOL GetExportFile(PathName* pPath, CCLexFile** ppNewFile);
BOOL GetCapabilities(CCLexFile* pFile, PathName* pPath, CapabilityTree* pCapTree);
BOOL DoExport(CCLexFile* pXarFile, PathName* pPath);
- INT32 HowCompatible(PathName& Filename);
+ INT32 HowCompatible(PathName& FileName);
BOOL GetImportFile(CCLexFile* pFile, CCLexFile** ppNewFile);
void Cleanup();
@@ -224,6 +224,11 @@
BOOL m_bImport;
BOOL m_bExport;
+ PathName m_FilterPath; // Full path to filter executable
+ PathName m_XMLFile; // Full path to filter XML config file for the current user
+ PathName m_TempXarFile; // Full path to temporary Xar file
+
+
PORTNOTE("other","PluginFilter COM bits removed")
#if !defined(EXCLUDE_FROM_XARALX)
CLSID m_CLSID;
Index: Trunk/XaraLX/wxOil/camview.cpp
===================================================================
--- Trunk/XaraLX/wxOil/camview.cpp (revision 971)
+++ Trunk/XaraLX/wxOil/camview.cpp (revision 972)
@@ -1498,7 +1498,7 @@
else
{
TRACEUSER("Gerry", _T("Deactivating the view
"));
-/*
+
// Lets just try setting no selected for the time being but only if this view is the selected one
if (DocView::GetSelected() == pDocView)
{
@@ -1508,7 +1508,7 @@
else
{
TRACEUSER("Gerry", _T("Not the selected view
"));
- }*/
+ }
}
}
Xara