+// import.cpp - Import subroutines.
+//
+// (c) 2012-2015 Xestia Software Development.
+//
+// This file is part of Xestia Address Book.
+//
+// Xestia Address Book is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by the
+// Free Software Foundation, version 3 of the license.
+//
+// Xestia Address Book is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with Xestia Address Book. If not, see <http://www.gnu.org/licenses/>
+
#include <wx/filedlg.h>
#include <wx/filename.h>
#include <wx/regex.h>
// Bring up a dialog selecting one or multiple
// files for processing based on type.
- struct ImportResultData{
-
- };
-
frmMainPtrInc->PauseAllTimers();
wxString FileTypes;
- long ContactsExported = 0;
- long ContactsCollected = 0;
- int ExportType = 0;
- int ExportCount = 0;
+ int ImportType = 0;
wxString FinalFilename;
wxArrayString SelectedFileList;
wxString SelectedFileDirectory;
wxString AccountName;
+ wxString AccountType;
int ImportErrorCount = 0;
- std::map<int,wxString> ResultData;
+ std::map<int,wxString> *ResultData = new std::map<int,wxString>;
FileTypes.Append(wxT("vCard 4.0 Contact(s) (*.vcf)"));
FileTypes.Append(wxT("|*.vcf|"));
FileTypes.Append(wxT("vCard 3.0 Contact(s) (*.vcf)"));
FileTypes.Append(wxT("|*.vcf"));
- // Open up the dialog to export file data.
+ // Open up the dialog to import file data.
- wxFileDialog ExportDlg(frmMainPtrInc, wxT("Import Contacts"), wxT(""), wxT(""),
+ wxFileDialog ImportDlg(frmMainPtrInc, wxT("Import Contacts"), wxT(""), wxT(""),
FileTypes, wxFD_OPEN|wxFD_MULTIPLE);
- if (ExportDlg.ShowModal() == wxID_CANCEL){
+ if (ImportDlg.ShowModal() == wxID_CANCEL){
frmMainPtrInc->ResumeAllTimers();
return;
// Get the list of filenames.
- ExportDlg.GetPaths(SelectedFileList);
+ ImportDlg.GetPaths(SelectedFileList);
// Find which data type is being used.
- ExportType = ExportDlg.GetFilterIndex();
+ ImportType = ImportDlg.GetFilterIndex();
std::map<int, ImportDataContact> ContactData;
- if (ExportType == 0){
+ if (ImportType == 0){
ContactData = ImportVCard4(&SelectedFileList);
-
- //ImportVCard4(DirMode, FinalFilename, FileListInc, &ExportCount);
-
+
}
- // vCard 3.0 export
+ // vCard 3.0 import
- if (ExportType == 1){
+ if (ImportType == 1){
ContactData = ImportVCard3(&SelectedFileList);
-
- //ImportVCard3(DirMode, FinalFilename, FileListInc, &ExportCount);
}
frmIC->ShowModal();
frmIC->GetResults(&ContactData);
AccountName = frmIC->GetAccount();
+ AccountType = frmIC->GetAccountType();
+
+ if (frmIC->GetDialogResult() == FALSE){
+
+ // User decided not to import. Clean up the
+ // dialog.
+
+ delete frmIC;
+ frmIC = NULL;
+ frmMainPtrInc->ResumeAllTimers();
+ return;
+
+ }
+
+ delete frmIC;
+ frmIC = NULL;
// Import the contacts into the selected account.
#if defined(__HAIKU__)
- //preffilename = wxT("noo");
+
#elif defined(__WIN32__)
UIDToken = iter->second.UIDValue;
}
-
- //GenerateUUID();
-
- /*if (iter->second.ContactSelected.UIDValue.IsEmpty()){
-
-
-
- }*/
// Check if the file exists in the directory already.
// File already exists so mark as an error.
- ResultData.insert(std::make_pair(ImportSeek, wxString::Format(_("Unable to import '%s'(%s): "), iter->second.FriendlyName, UIDToken)));
+ ResultData->insert(std::make_pair(ImportSeek, wxString::Format(_("Unable to import '%s'(%s): %s"), iter->second.FriendlyName, UIDToken, _("Contact already exists."))));
ImportErrorCount++;
ImportSeek++;
GeneratedFilename.Clear();
wxFFile OutputFile;
#if wxABI_VERSION < 20900
- OutputFile.Open(OutputFilename, wxT("w"));
+ if(!OutputFile.Open(OutputFilename, wxT("w"))){
#else
- OutputFile.Open(OutputFilename, wxT("w"));
+ if(!OutputFile.Open(OutputFilename, wxT("w"))){
#endif
+ ResultData->insert(std::make_pair(ImportSeek, wxString::Format(_("Unable to import '%s'(%s): %s"), iter->second.FriendlyName, UIDToken, _("Error occured whilst trying to create this contact. Please check permissions and storage device."))));
+
+ }
OutputFile.Write(iter->second.ContactData, wxConvAuto());
OutputFile.Close();
- ResultData.insert(std::make_pair(ImportSeek, wxString::Format(_("Contact '%s'(%s) was successfully imported."))));
+ ResultData->insert(std::make_pair(ImportSeek, wxString::Format(_("Contact '%s'(%s) was successfully imported."), iter->second.FriendlyName, UIDToken)));
}
// Check if the import error count is more than 0. If it is, then
// display the results dialog.
- frmImportResults *frmIR = new frmImportResults(frmMainPtrInc);
- frmIR->LoadData(&ResultData);
- frmIR->ShowModal();
+ wxCommandEvent imprres(IMPORT_RESULTSSHOW);
+ imprres.SetClientData(ResultData);
+ imprres.SetInt(ImportCount);
+ imprres.SetExtraLong(ImportErrorCount);
+ wxPostEvent(frmMainPtrInc, imprres);
- delete frmIR;
- frmIR = NULL;
-
- delete frmIC;
- frmIC = NULL;
-
// Syncronise the account which the contacts got imported to.
+ // (If the account is not a local account).
+
+ if (AccountType != wxT("Local") && AccountType != wxT("local")){
- wxString *AccNamePostEventPtr = new wxString;
+ wxString AccNamePostEvent;
- wxCommandEvent accevent(SYNCACCOUNT);
- accevent.SetClientData(AccNamePostEventPtr);
+ AccNamePostEvent.Clear();
+ AccNamePostEvent.Append(AccountName);
+ AccNamePostEvent.Trim();
- wxPostEvent(frmMainPtrInc, accevent);
+ wxCommandEvent accevent(SYNCACCOUNT);
+ accevent.SetString(AccNamePostEvent);
- //wxPostEvent
+ wxPostEvent(frmMainPtrInc, accevent);
+
+ }
// Resume the timers.