Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Added source code, headers and unit test to check that a file has loaded OK in Contac...
authorSteve Brokenshire <sbrokenshire@xestia.co.uk>
Tue, 8 Dec 2015 21:53:40 +0000 (21:53 +0000)
committerSteve Brokenshire <sbrokenshire@xestia.co.uk>
Tue, 8 Dec 2015 21:53:40 +0000 (21:53 +0000)
source/contacteditor/ContactDataObject.cpp
source/contacteditor/ContactDataObject.h
source/tests/xestiaab_contactload.h

index 3d4d319..49a5f2c 100644 (file)
@@ -54,8 +54,129 @@ ContactLoadStatus ContactDataObject::LoadFile(wxString Filename){
        
        }
        
+       wxStringTokenizer wSTContactFileLines(vCard4FormatCheck.WriteString(), wxT("\r\n"));
        
+       std::map<int, wxString> ContactFileLines;
+
+       int ContactLineSeek = 0;
+
+       while (wSTContactFileLines.HasMoreTokens() == TRUE){
+
+               wxString ContactLine = wSTContactFileLines.GetNextToken();
+               ContactFileLines.insert(std::make_pair(ContactLineSeek, ContactLine));
+               ContactLineSeek++;              
+       
+       }
+       
+       wxString wxSPropertyNextLine;
+       
+       bool ExtraLineSeek = TRUE;
+       bool QuoteMode = FALSE;
+       bool PropertyFind = TRUE;
+       int ContactLineLen = 0;
+       int QuoteBreakPoint = 0;
+       wxString ContactLine;
+       wxString PropertyLine;
+       wxString PropertySeg1;
+       wxString PropertySeg2;
+       wxString PropertyNextLine;
+       wxString Property;
+       
+       for (std::map<int,wxString>::iterator iter = ContactFileLines.begin(); 
+        iter != ContactFileLines.end(); ++iter){
+
+               ExtraLineSeek = TRUE;
+               QuoteMode = FALSE;
+               PropertyFind = TRUE;
+               ContactLineLen = 0;
+               QuoteBreakPoint = 0;
+               ContactLine.Clear();
+               PropertyLine.Clear();
+               PropertySeg1.Clear();
+               PropertySeg2.Clear();
+               Property.Clear();
+        
+               ContactLine = iter->second;
+               
+               while (ExtraLineSeek == TRUE){
+               
+                       // Check if there is extra data on the next line 
+                       // (indicated by space or tab at the start) and add data.
+               
+                       iter++;
+                       
+                       if (iter == ContactFileLines.end()){
+                       
+                               iter--;
+                               break;
+                       
+                       }                       
+               
+                       PropertyNextLine = iter->second;
+               
+                       if (PropertyNextLine.Mid(0, 1) == wxT(" ") || PropertyNextLine.Mid(0, 1) == wxT("\t")){
+               
+                               PropertyNextLine.Remove(0, 1);
+                               ContactLine.Append(PropertyNextLine);
+               
+                       } else {
+                       
+                               iter--;
+                               ExtraLineSeek = FALSE;
+                       
+                       }
+               
+               }
+
+               ContactLineLen = ContactLine.Len();
+               
+               // Make sure we are not in quotation mode.
+               // Make sure colon does not have \ or \\ before it.
+               
+               for (int i = 0; i <= ContactLineLen; i++){
+               
+                       if ((ContactLine.Mid(i, 1) == wxT(";") || ContactLine.Mid(i, 1) == wxT(":")) && PropertyFind == TRUE){
+                       
+                               PropertyFind = FALSE;
+                       
+                       } else if (PropertyFind == TRUE){
+                       
+                               Property.Append(ContactLine.Mid(i, 1));
+                       
+                       }               
+               
+                       if (ContactLine.Mid(i, 1) == wxT("\"")){
+                       
+                               if (QuoteMode == TRUE){
+                               
+                                       QuoteMode = FALSE;
+                               
+                               } else {
+                       
+                                       QuoteMode = TRUE;
+                                       
+                               }
+                       
+                       }
+                       
+                       if (ContactLine.Mid(i, 1) == wxT(":") && ContactLine.Mid((i - 1), 1) != wxT("\\") && QuoteMode == FALSE){
+                       
+                               QuoteBreakPoint = i;
+                               break;
+                       
+                       }
+               
+               }
+               
+               // Split that line at the point into two variables (ignore the colon).
+               
+               PropertySeg1 = ContactLine.Mid(0, QuoteBreakPoint);
+               PropertySeg2 = ContactLine.Mid((QuoteBreakPoint + 1));
+               
+               
+        
+       }
        
-       return CONTACTLOAD_UNITTESTFAIL;
+       return CONTACTLOAD_OK;
 
 }
\ No newline at end of file
index 2c6b394..050bd53 100644 (file)
 #include <wx/wx.h>
 #include <wx/file.h>
 #include <map>
+#include <wx/tokenzr.h>
+
 #include "../vcard/vcard.h"
 
 enum ContactLoadStatus{
        CONTACTLOAD_UNITTESTFAIL = -1,
+       CONTACTLOAD_OK,
        CONTACTLOAD_FILEMISSING,
        CONTACTLOAD_FILEERROR,
        CONTACTLOAD_FILEINVALIDFORMAT,
index 93c62d7..1820bbf 100644 (file)
@@ -41,6 +41,10 @@ TEST(ContactLoad, ContactLoadTests){
        
        ASSERT_EQ(CONTACTLOAD_FILEBASESPECFAIL, TestFile.LoadFile("LoadCheck-Load3.vcf"));
 
+       // Check that the vCard 4.0 file loads OK.
+
+       ASSERT_EQ(CONTACTLOAD_OK, TestFile.LoadFile("LoadCheck-Load4.vcf"));
+
 }
 
 // TODO: Add tests for the Contact Loading process.
\ 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