// 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){
wxT("vCard4")
};
- bool ValidImport = false;
+ bool ValidInput = false;
bool ValidOutput = false;
// Check that the input format is valid.
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)){
+
+ int InputFileErrNo = InputFile.GetLastError();
+
+ 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 << std::endl;
+
+ }
+
return CONVERTRESULT_OK;
}
\ No newline at end of file