X-Git-Url: http://Server1/repobrowser/?p=xestiaab%2F.git;a=blobdiff_plain;f=source%2Fconvert.cpp;h=d7345196e3163d26ed772376f4ac3cde85d8fa2c;hp=d8578d7263ed259badab1b787e316600a0c60a1b;hb=3ef806261b5482a584e05dc8311c8d7633f146b4;hpb=e2afc613b2d4292d461af99ee3443b23a5b1d55a diff --git a/source/convert.cpp b/source/convert.cpp index d8578d7..d734519 100644 --- a/source/convert.cpp +++ b/source/convert.cpp @@ -17,6 +17,8 @@ // with Xestia Address Book. If not, see #include "convert.h" +#include "vcard/vcard.h" +#include "vcard/vcard34conv.h" ConvertResult ConvertContact(wxString InputFormat, wxString OutputFormat, wxString InputFilename, wxString OutputFilename){ @@ -26,7 +28,7 @@ ConvertResult ConvertContact(wxString InputFormat, wxString OutputFormat, wxT("vCard4") }; - bool ValidImport = false; + bool ValidInput = false; bool ValidOutput = false; // Check that the input format is valid. @@ -34,26 +36,167 @@ ConvertResult ConvertContact(wxString InputFormat, wxString OutputFormat, for (long l = 0; l < ValidFormats.size(); l++){ if (InputFormat == ValidFormats[l]){ - ValidImport = true; + ValidInput = true; break; } } - if (ValidImport == false){ + if (ValidInput == false){ - return CONVERTRESULT_INVALIDIMPORTFORMAT; + return CONVERTRESULT_INVALIDINPUTFORMAT; } + // Check that the output format is valid. + + for (long l = 0; l < ValidFormats.size(); l++){ + + if (OutputFormat == ValidFormats[l]){ + ValidOutput = true; + break; + } + + } + + if (ValidOutput == false){ + + return CONVERTRESULT_INVALIDOUTPUTFORMAT; + + } + + // Check that the input and output formats + // are not the same. + if (InputFormat == OutputFormat){ return CONVERTRESULT_FORMATSSAME; } - // Check that the output format is valid. + // Check that the input filename is not empty. + + if (InputFilename.empty()){ + + return CONVERTRESULT_INPUTFILEEMPTY; + + } + + // Check that the input file given exists. + + if (!wxFileExists(InputFilename)){ + + return CONVERTRESULT_INPUTFILEMISSING; + + } + + wxFile InputFile; + + if (!InputFile.Open(InputFilename, wxFile::read, wxS_DEFAULT)){ + + return CONVERTRESULT_INPUTFILEERROR; + + } + + // Check that the output file can be opened. + + bool OutputPipe = false; + wxFile OutputFile; + + if (!OutputFilename.IsEmpty()){ + + if (!OutputFile.Open(OutputFilename, wxFile::write, wxS_DEFAULT)){ + return CONVERTRESULT_OUTPUTFILEERROR; + } + + } else { + + OutputPipe = true; + + } + + // Check that the file has the correct file format. + + vCard vCard4Format; + wxString FinalData; + + if (InputFormat == "vCard4"){ + + // Read from the file. + + wxString InputFileData; + InputFile.ReadAll(&InputFileData, wxConvAuto()); + + vCard vCard4Format; + + vCard4Format.LoadString(InputFileData); + + if (vCard4Format.Get("VERSION") != "4.0"){ + return CONVERTRESULT_INPUTFILEINVALIDFORMAT; + } + + } else if (InputFormat == "vCard3"){ + + // Read from the file. + + wxString InputFileData; + InputFile.ReadAll(&InputFileData, wxConvAuto()); + + vCard InputvCard; + + InputvCard.LoadString(InputFileData); + + if (InputvCard.Get("VERSION") != "3.0"){ + return CONVERTRESULT_INPUTFILEINVALIDFORMAT; + } + vCard34Conv vCard34ConvObj; + + vCard vCard4Format; + + vCard34ConvObj.ConvertToV4(&InputFileData, &vCard4Format); + + FinalData = vCard4Format.WriteString(); + + } + + // Convert the vCard into the required format and + // get the string value. + + if (OutputFormat == "vCard4"){ + + // Do nothing as the vCard is already in the vCard 4.0 + // format. + + } else if (OutputFormat == "vCard3"){ + + // Convert the vCard to vCard 3.0. + + vCard34Conv vCard34ConvObj; + + vCard vCard3Format; + + vCard34ConvObj.ConvertToV3(InputFilename, &FinalData); + + } + + // Check if we are outputting to console or to file. + + if (OutputPipe == false){ + + // We are outputting to a file. + + OutputFile.Write(FinalData, wxConvUTF8); + + } else { + + // Write out the data to the console. + + FinalData.Trim(); + std::cout << FinalData.ToStdString() << std::endl; + + } + return CONVERTRESULT_OK; -} \ No newline at end of file +}