1 // frmActivityMgr-addtask.cpp - Activity Manager add task subroutines.
3 // (c) 2012-2015 Xestia Software Development.
5 // This file is part of Xestia Address Book.
7 // Xestia Address Book is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by the
9 // Free Software Foundation, version 3 of the license.
11 // Xestia Address Book is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with Xestia Address Book. If not, see <http://www.gnu.org/licenses/>
19 #include "frmActivityMgr.h"
21 int frmActivityMgr::AddTask(int TaskType, wxString TaskDetail, wxString TaskAccount,
22 wxString TaskURL, wxString TaskFilename, wxString TaskFullFilename,
29 CardDAV* CardDAVConn = new CardDAV;
31 coldata.SetId(ActivityTaskID);
32 coldata.SetData(ActivityTaskID);
34 if (ApplicationSleepMode == FALSE){
36 AnimationTimer.StartAnimation();
40 // Get the preferences file.
42 wxString PrefFilename = GetUserPrefDir();
44 XABPreferences PrefData(PrefFilename);
48 wxString AccountAddress;
50 wxString AccountUsername;
51 wxString AccountPassword;
52 bool AccountSSL = FALSE;
53 wxString AccountPrefix;
55 // Look for the account and get the friendly name for the account.
57 for (int i = 0; i < PrefData.accounts.GetCount(); i++){
59 AccountDir = PrefData.accounts.GetAccountDirectory(i);
62 AccountDir.Append(wxT(".carddav"));
64 if (AccountDir == TaskAccount){
66 AccountName = PrefData.accounts.GetAccountName(i);
67 AccountAddress = PrefData.accounts.GetAccountAddress(i);
68 AccountPort = PrefData.accounts.GetAccountPort(i);
69 AccountUsername = PrefData.accounts.GetAccountUsername(i);
70 AccountPassword = PrefData.accounts.GetAccountPassword(i);
71 AccountPrefix = PrefData.accounts.GetAccountDirPrefix(i);
72 AccountSSL = PrefData.accounts.GetAccountSSL(i);
75 AccountAddress.Trim();
77 AccountUsername.Trim();
78 AccountPassword.Trim();
86 ActivityMgrAccountSettings AccountSettings;
87 AccountSettings.Address = AccountAddress;
88 AccountSettings.Port = AccountPort;
89 AccountSettings.Username = AccountUsername;
90 AccountSettings.Password = AccountPassword;
91 AccountSettings.SSL = AccountSSL;
92 AccountSettings.Prefix = AccountPrefix;
93 AccountSettings.Dir = AccountDir;
95 CardDAVConn->SetupConnection(AccountAddress, AccountPort, AccountUsername, AccountPassword, AccountSSL, AccountPrefix, AccountDir);
96 CardDAVConn->SetupVariables(&ActivityList, ActivityTaskID);
97 CardDAVConn->SetupResultBools(&BlankBool, &BlankBool);
100 // 0 - Add a contact.
101 // 1 - Update a contact.
102 // 2 - Delete a contact.
103 // 3 - Account syncronisation.
107 coldata.SetText(_("Adding Contact '") + TaskDetail + _("'"));
108 itemindex = lstActivity->InsertItem(coldata);
110 lstActivity->SetItem(itemindex, 1, AccountName);
111 lstActivity->SetItem(itemindex, 2, _("Queued"));
113 CardDAVConn->SetUploadMode(TRUE);
114 CardDAVConn->SetupData(wxT("PUT"), TaskURL, TaskData);
116 // Setup all of the task details.
118 ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
120 CardDAV2 *ConnObject = new CardDAV2(AccountAddress.ToStdString(), AccountPort, AccountUsername.ToStdString(), AccountPassword.ToStdString(), AccountSSL, AccountPrefix.ToStdString(), AccountDir.ToStdString());
121 ConnObject->SetupConnectionObject();
123 ActivityListType.insert(std::make_pair(ActivityTaskID, 0));
124 ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
125 ActivityListURL.insert(std::make_pair(ActivityTaskID, TaskURL));
126 ActivityListEditMode.insert(std::make_pair(ActivityTaskID, false));
127 ActivityListConn.insert(std::make_pair(ActivityTaskID, CardDAVConn));
128 ActivityListConnObject.insert(std::make_pair(ActivityTaskID, ConnObject));
129 ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
130 ActivityListTaskDetail.insert(std::make_pair(ActivityTaskID, TaskDetail));
131 ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
132 ActivityListFilename.insert(std::make_pair(ActivityTaskID, TaskFilename));
133 ActivityListFullFilename.insert(std::make_pair(ActivityTaskID, TaskFullFilename));
134 ActivityListAccSettings.insert(std::make_pair(ActivityTaskID, AccountSettings));
136 ActivityListETag.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETag(TaskFilename)));
137 ActivityListETagOriginal.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETagOriginal(TaskFilename)));
138 ActivityList.insert(std::make_pair(ActivityTaskID, 0));
140 } else if (TaskType == 1){
142 coldata.SetText(_("Updating Contact '") + TaskDetail + _("'"));
143 itemindex = lstActivity->InsertItem(coldata);
145 lstActivity->SetItem(itemindex, 1, AccountName);
146 lstActivity->SetItem(itemindex, 2, _("Queued"));
148 ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
150 CardDAV2 *ConnObject = new CardDAV2(AccountAddress.ToStdString(), AccountPort, AccountUsername.ToStdString(), AccountPassword.ToStdString(), AccountSSL, AccountPrefix.ToStdString(), AccountDir.ToStdString());
151 ConnObject->SetupConnectionObject();
153 ActivityListType.insert(std::make_pair(ActivityTaskID, 1));
154 ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
155 ActivityListURL.insert(std::make_pair(ActivityTaskID, TaskURL));
156 ActivityListEditMode.insert(std::make_pair(ActivityTaskID, true));
157 ActivityListConnObject.insert(std::make_pair(ActivityTaskID, ConnObject));
158 ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
159 ActivityListTaskDetail.insert(std::make_pair(ActivityTaskID, TaskDetail));
160 ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
161 ActivityListFilename.insert(std::make_pair(ActivityTaskID, TaskFilename));
162 ActivityListFullFilename.insert(std::make_pair(ActivityTaskID, TaskFullFilename));
163 ActivityListAccSettings.insert(std::make_pair(ActivityTaskID, AccountSettings));
165 ActivityListETag.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETag(TaskFilename)));
166 ActivityListETagOriginal.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETagOriginal(TaskFilename)));
167 ActivityList.insert(std::make_pair(ActivityTaskID, 0));
169 } else if (TaskType == 2){
171 coldata.SetText(_("Deleting Contact '") + TaskDetail + _("'"));
172 itemindex = lstActivity->InsertItem(coldata);
174 lstActivity->SetItem(itemindex, 1, AccountName);
175 lstActivity->SetItem(itemindex, 2, _("Queued"));
177 ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
179 CardDAV2 *ConnObject = new CardDAV2(AccountAddress.ToStdString(), AccountPort, AccountUsername.ToStdString(), AccountPassword.ToStdString(), AccountSSL, AccountPrefix.ToStdString(), AccountDir.ToStdString());
180 ConnObject->SetupConnectionObject();
182 ActivityList.insert(std::make_pair(ActivityTaskID, 0));
183 ActivityListType.insert(std::make_pair(ActivityTaskID, 2));
184 ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
185 ActivityListURL.insert(std::make_pair(ActivityTaskID, TaskURL));
186 ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
187 ActivityListFilename.insert(std::make_pair(ActivityTaskID, TaskFilename));
188 ActivityListConnObject.insert(std::make_pair(ActivityTaskID, ConnObject));
189 ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
190 ActivityListAccSettings.insert(std::make_pair(ActivityTaskID, AccountSettings));
192 } else if (TaskType == 3){
194 coldata.SetText(_("Syncronising All Contacts"));
195 itemindex = lstActivity->InsertItem(coldata);
197 lstActivity->SetItem(itemindex, 1, AccountName);
198 lstActivity->SetItem(itemindex, 2, _("Queued"));
200 ActivityList.insert(std::make_pair(ActivityTaskID, 0));
201 ActivityListType.insert(std::make_pair(ActivityTaskID, 3));
202 ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
203 ActivityListConn.insert(std::make_pair(ActivityTaskID, CardDAVConn));
204 ActivityListTaskDetail.insert(std::make_pair(ActivityTaskID, AccountPrefix));
205 ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
206 ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
207 ActivityListAccSettings.insert(std::make_pair(ActivityTaskID, AccountSettings));
211 ProcessTasksData = TRUE;
213 if (!ActProcessTimer.IsRunning() && ApplicationSleepMode == FALSE) {
215 wxCommandEvent event(ACTMGR_STARTTIMER);
216 wxPostEvent(this, event);
218 wxCommandEvent eventp(ACTMGR_STARTPROCESSTIMER);
219 wxPostEvent(this, eventp);
221 //ActProcessTimer.Start(1000, FALSE);
222 //ActListProcTimer.Start(1000, FALSE);
226 // Update the recovery database.
228 return ActivityTaskID;
232 void frmActivityMgr::RemoveTask(){
234 // Remove task from the recovery database.
238 void frmActivityMgr::StopTask( wxCommandEvent& event ){
240 // Check if activity has been completed already before stopping.
242 long longSelected = -1;
243 int intSelectedData = 0;
245 longSelected = lstActivity->GetNextItem(longSelected,
247 wxLIST_STATE_SELECTED);
249 intSelectedData = (int)lstActivity->GetItemData(longSelected);
251 if (longSelected == -1){
255 std::map<int,CardDAV*>::iterator CDAVter;
257 CDAVter = ActivityListConn.find(intSelectedData);
259 CDAVter->second->Abort();
261 lstActivity->SetItem(longSelected, 2, _("Stopped"));
265 void frmActivityMgr::StopAllTasks( wxCommandEvent& event ){
267 // Check if activity has been completed already before stopping.
269 // TODO: Look through for '1' and stop the running task(s).
271 long longSelected = -1;
272 int intSelectedData = 0;
274 longSelected = lstActivity->GetNextItem(longSelected,
276 wxLIST_STATE_SELECTED);
278 intSelectedData = (int)lstActivity->GetItemData(longSelected);
280 if (longSelected == -1){
284 std::map<int,CardDAV*>::iterator CDAVter;
286 CDAVter = ActivityListConn.find(intSelectedData);
288 CDAVter->second->Abort();
290 lstActivity->SetItem(longSelected, 2, _("Stopped"));
291 AnimationTimer.StopAnimation();
292 bmpActivity->SetBitmap(SleepBitmap);
293 lblDetails->SetLabel(_("No activity."));
297 void frmActivityMgr::RetryTask( wxCommandEvent& event ){
299 // Check if activity has been completed already before retrying.
301 long longSelected = -1;
302 int intSelectedData = 0;
304 longSelected = lstActivity->GetNextItem(longSelected,
306 wxLIST_STATE_SELECTED);
308 intSelectedData = (int)lstActivity->GetItemData(longSelected);
310 if (longSelected == -1){
314 std::map<int,CardDAV*>::iterator CDAVter;
316 CDAVter = ActivityListConn.find(intSelectedData);
320 //CDAVter->second.Abort();
322 std::map<int,int>::iterator Iter;
323 Iter = ActivityList.find(intSelectedData);
327 AnimationTimer.StartAnimation();
329 if (!ActProcessTimer.IsRunning()) {
331 ActProcessTimer.Start(150, FALSE);
332 ActListProcTimer.Start(150, FALSE);
336 //lstActivity->SetItem(longSelected, 2, _("Processing..."));
340 int frmActivityMgr::GetTaskStatus(int intTaskID){
344 if (ActivityList.find(intTaskID) == ActivityList.end()){
350 std::map<int,int>::iterator taskiter = ActivityList.find(intTaskID);
351 intResult = taskiter->second;