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 AnimationTimer.StartAnimation();
36 // Get the preferences file.
38 wxString PrefFilename = GetUserPrefDir();
40 XABPreferences PrefData(PrefFilename);
44 wxString AccountAddress;
46 wxString AccountUsername;
47 wxString AccountPassword;
48 bool AccountSSL = FALSE;
49 wxString AccountPrefix;
51 // Look for the account and get the friendly name for the account.
53 for (int i = 0; i < PrefData.accounts.GetCount(); i++){
55 AccountDir = PrefData.accounts.GetAccountDirectory(i);
58 AccountDir.Append(wxT(".carddav"));
60 if (AccountDir == TaskAccount){
62 AccountName = PrefData.accounts.GetAccountName(i);
63 AccountAddress = PrefData.accounts.GetAccountAddress(i);
64 AccountPort = PrefData.accounts.GetAccountPort(i);
65 AccountUsername = PrefData.accounts.GetAccountUsername(i);
66 AccountPassword = PrefData.accounts.GetAccountPassword(i);
67 AccountPrefix = PrefData.accounts.GetAccountDirPrefix(i);
68 AccountSSL = PrefData.accounts.GetAccountSSL(i);
71 AccountAddress.Trim();
73 AccountUsername.Trim();
74 AccountPassword.Trim();
82 ActivityMgrAccountSettings AccountSettings;
83 AccountSettings.Address = AccountAddress;
84 AccountSettings.Port = AccountPort;
85 AccountSettings.Username = AccountUsername;
86 AccountSettings.Password = AccountPassword;
87 AccountSettings.SSL = AccountSSL;
88 AccountSettings.Prefix = AccountPrefix;
89 AccountSettings.Dir = AccountDir;
91 CardDAVConn->SetupConnection(AccountAddress, AccountPort, AccountUsername, AccountPassword, AccountSSL, AccountPrefix, AccountDir);
92 CardDAVConn->SetupVariables(&ActivityList, ActivityTaskID);
93 CardDAVConn->SetupResultBools(&BlankBool, &BlankBool);
97 // 1 - Update a contact.
98 // 2 - Delete a contact.
99 // 3 - Account syncronisation.
103 coldata.SetText(_("Adding Contact '") + TaskDetail + _("'"));
104 itemindex = lstActivity->InsertItem(coldata);
106 lstActivity->SetItem(itemindex, 1, AccountName);
107 lstActivity->SetItem(itemindex, 2, _("Queued"));
109 CardDAVConn->SetUploadMode(TRUE);
110 CardDAVConn->SetupData(wxT("PUT"), TaskURL, TaskData);
112 // Setup all of the task details.
114 ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
116 ActivityListType.insert(std::make_pair(ActivityTaskID, 0));
117 ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
118 ActivityListConn.insert(std::make_pair(ActivityTaskID, CardDAVConn));
119 ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
120 ActivityListTaskDetail.insert(std::make_pair(ActivityTaskID, TaskDetail));
121 ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
122 ActivityListFilename.insert(std::make_pair(ActivityTaskID, TaskFilename));
123 ActivityListFullFilename.insert(std::make_pair(ActivityTaskID, TaskFullFilename));
124 ActivityListAccSettings.insert(std::make_pair(ActivityTaskID, AccountSettings));
126 ActivityListETag.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETag(TaskFilename)));
127 ActivityListETagOriginal.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETagOriginal(TaskFilename)));
128 ActivityList.insert(std::make_pair(ActivityTaskID, 0));
130 } else if (TaskType == 1){
132 coldata.SetText(_("Updating Contact '") + TaskDetail + _("'"));
133 itemindex = lstActivity->InsertItem(coldata);
135 lstActivity->SetItem(itemindex, 1, AccountName);
136 lstActivity->SetItem(itemindex, 2, _("Queued"));
138 CardDAVConn->SetUploadMode(TRUE);
139 CardDAVConn->SetupData(wxT("PUT"), TaskURL, TaskData);
140 CardDAVConn->SetEditMode(TRUE);
142 ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
144 ActivityListType.insert(std::make_pair(ActivityTaskID, 1));
145 ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
146 ActivityListConn.insert(std::make_pair(ActivityTaskID, CardDAVConn));
147 ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
148 ActivityListTaskDetail.insert(std::make_pair(ActivityTaskID, TaskDetail));
149 ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
150 ActivityListFilename.insert(std::make_pair(ActivityTaskID, TaskFilename));
151 ActivityListFullFilename.insert(std::make_pair(ActivityTaskID, TaskFullFilename));
152 ActivityListAccSettings.insert(std::make_pair(ActivityTaskID, AccountSettings));
154 ActivityListETag.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETag(TaskFilename)));
155 ActivityListETagOriginal.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETagOriginal(TaskFilename)));
156 ActivityList.insert(std::make_pair(ActivityTaskID, 0));
158 } else if (TaskType == 2){
160 coldata.SetText(_("Deleting Contact '") + TaskDetail + _("'"));
161 itemindex = lstActivity->InsertItem(coldata);
163 lstActivity->SetItem(itemindex, 1, AccountName);
164 lstActivity->SetItem(itemindex, 2, _("Queued"));
166 ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
168 ActivityList.insert(std::make_pair(ActivityTaskID, 0));
169 ActivityListType.insert(std::make_pair(ActivityTaskID, 2));
170 ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
171 ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
172 ActivityListConn.insert(std::make_pair(ActivityTaskID, CardDAVConn));
173 ActivityListFilename.insert(std::make_pair(ActivityTaskID, TaskFilename));
174 ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
175 ActivityListAccSettings.insert(std::make_pair(ActivityTaskID, AccountSettings));
177 } else if (TaskType == 3){
179 coldata.SetText(_("Syncronising All Contacts"));
180 itemindex = lstActivity->InsertItem(coldata);
182 lstActivity->SetItem(itemindex, 1, AccountName);
183 lstActivity->SetItem(itemindex, 2, _("Queued"));
185 ActivityList.insert(std::make_pair(ActivityTaskID, 0));
186 ActivityListType.insert(std::make_pair(ActivityTaskID, 3));
187 ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
188 ActivityListConn.insert(std::make_pair(ActivityTaskID, CardDAVConn));
189 ActivityListTaskDetail.insert(std::make_pair(ActivityTaskID, AccountPrefix));
190 ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
191 ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
192 ActivityListAccSettings.insert(std::make_pair(ActivityTaskID, AccountSettings));
196 ProcessTasksData = TRUE;
198 if (!ActProcessTimer.IsRunning()) {
200 wxCommandEvent event(ACTMGR_STARTTIMER);
201 wxPostEvent(this, event);
203 wxCommandEvent eventp(ACTMGR_STARTPROCESSTIMER);
204 wxPostEvent(this, eventp);
206 //ActProcessTimer.Start(1000, FALSE);
207 //ActListProcTimer.Start(1000, FALSE);
211 // Update the recovery database.
213 return ActivityTaskID;
217 void frmActivityMgr::RemoveTask(){
219 // Remove task from the recovery database.
223 void frmActivityMgr::StopTask( wxCommandEvent& event ){
225 // Check if activity has been completed already before stopping.
227 long longSelected = -1;
228 int intSelectedData = 0;
230 longSelected = lstActivity->GetNextItem(longSelected,
232 wxLIST_STATE_SELECTED);
234 intSelectedData = (int)lstActivity->GetItemData(longSelected);
236 if (longSelected == -1){
240 std::map<int,CardDAV*>::iterator CDAVter;
242 CDAVter = ActivityListConn.find(intSelectedData);
244 CDAVter->second->Abort();
246 lstActivity->SetItem(longSelected, 2, _("Stopped"));
250 void frmActivityMgr::StopAllTasks( wxCommandEvent& event ){
252 // Check if activity has been completed already before stopping.
254 // TODO: Look through for '1' and stop the running task(s).
256 long longSelected = -1;
257 int intSelectedData = 0;
259 longSelected = lstActivity->GetNextItem(longSelected,
261 wxLIST_STATE_SELECTED);
263 intSelectedData = (int)lstActivity->GetItemData(longSelected);
265 if (longSelected == -1){
269 std::map<int,CardDAV*>::iterator CDAVter;
271 CDAVter = ActivityListConn.find(intSelectedData);
273 CDAVter->second->Abort();
275 lstActivity->SetItem(longSelected, 2, _("Stopped"));
276 AnimationTimer.StopAnimation();
277 bmpActivity->SetBitmap(SleepBitmap);
278 lblDetails->SetLabel(_("No activity."));
282 void frmActivityMgr::RetryTask( wxCommandEvent& event ){
284 // Check if activity has been completed already before retrying.
286 long longSelected = -1;
287 int intSelectedData = 0;
289 longSelected = lstActivity->GetNextItem(longSelected,
291 wxLIST_STATE_SELECTED);
293 intSelectedData = (int)lstActivity->GetItemData(longSelected);
295 if (longSelected == -1){
299 std::map<int,CardDAV*>::iterator CDAVter;
301 CDAVter = ActivityListConn.find(intSelectedData);
305 //CDAVter->second.Abort();
307 std::map<int,int>::iterator Iter;
308 Iter = ActivityList.find(intSelectedData);
312 AnimationTimer.StartAnimation();
314 if (!ActProcessTimer.IsRunning()) {
316 ActProcessTimer.Start(150, FALSE);
317 ActListProcTimer.Start(150, FALSE);
321 //lstActivity->SetItem(longSelected, 2, _("Processing..."));
325 int frmActivityMgr::GetTaskStatus(int intTaskID){
329 if (ActivityList.find(intTaskID) == ActivityList.end()){
335 std::map<int,int>::iterator taskiter = ActivityList.find(intTaskID);
336 intResult = taskiter->second;