Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Setup CMake to build for macOS
[xestiaab/.git] / source / convert.cpp
index d8578d7..d734519 100644 (file)
@@ -17,6 +17,8 @@
 // with Xestia Address Book. If not, see <http://www.gnu.org/licenses/>
 
 #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
+}
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy