X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;ds=inline;f=source%2Fcommon%2Ftimers.cpp;h=01849530fc4397fa73136962d21f7d32c49e1955;hb=614d5a1438c29af472a4fec7abefda17f6405b6b;hp=02bc92055961988c8e542a934117f7411a7a0dde;hpb=45729fca56479bd9158486e0cda0c4a94b4dd1dc;p=xestiaab%2F.git
diff --git a/source/common/timers.cpp b/source/common/timers.cpp
index 02bc920..0184953 100644
--- a/source/common/timers.cpp
+++ b/source/common/timers.cpp
@@ -1,4 +1,22 @@
-#include "../frmActivityMgr.h"
+// timers.cpp - Timers 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
+
+#include "../actmgr/frmActivityMgr.h"
#include "../frmContact.h"
#include "../frmMain.h"
#include
@@ -14,6 +32,8 @@
void wxActTimer::Notify(){
+ // Notify function for wxActTimer.
+
frmMain *frmMainPtrProc = static_cast(frmMainPtr);
wxCommandEvent shuffleevent(ACTMGR_SHUFFLE);
@@ -21,12 +41,12 @@ void wxActTimer::Notify(){
if (intActivityProgress == 0){
wxMemoryInputStream istream(misc_activity1_png, sizeof(misc_activity1_png));
- wxImage misc_activity1_pngi(istream, wxBITMAP_TYPE_PNG);
+ wxImage misc_activity1_pngi(istream, wxBITMAP_TYPE_PNG);
wxBitmap activityiconbmp(misc_activity1_pngi, -1);
bmpActivity->SetBitmap(activityiconbmp);
-
+
intActivityProgress++;
-
+
} else if (intActivityProgress == 1){
wxMemoryInputStream istream(misc_activity2_png, sizeof(misc_activity2_png));
@@ -35,7 +55,7 @@ void wxActTimer::Notify(){
bmpActivity->SetBitmap(activityiconbmp);
intActivityProgress++;
-
+
} else if (intActivityProgress == 2){
wxMemoryInputStream istream(misc_activity3_png, sizeof(misc_activity3_png));
@@ -44,7 +64,7 @@ void wxActTimer::Notify(){
bmpActivity->SetBitmap(activityiconbmp);
intActivityProgress++;
-
+
} else if (intActivityProgress == 3){
wxMemoryInputStream istream(misc_activity4_png, sizeof(misc_activity4_png));
@@ -53,7 +73,7 @@ void wxActTimer::Notify(){
bmpActivity->SetBitmap(activityiconbmp);
intActivityProgress++;
-
+
} else if (intActivityProgress == 4){
wxMemoryInputStream istream(misc_activity5_png, sizeof(misc_activity5_png));
@@ -62,7 +82,7 @@ void wxActTimer::Notify(){
bmpActivity->SetBitmap(activityiconbmp);
intActivityProgress++;
-
+
} else if (intActivityProgress == 5){
wxMemoryInputStream istream(misc_activity6_png, sizeof(misc_activity6_png));
@@ -71,7 +91,7 @@ void wxActTimer::Notify(){
bmpActivity->SetBitmap(activityiconbmp);
intActivityProgress++;
-
+
} else if (intActivityProgress == 6){
wxMemoryInputStream istream(misc_activity7_png, sizeof(misc_activity7_png));
@@ -80,7 +100,7 @@ void wxActTimer::Notify(){
bmpActivity->SetBitmap(activityiconbmp);
intActivityProgress++;
-
+
} else if (intActivityProgress == 7){
wxMemoryInputStream istream(misc_activity8_png, sizeof(misc_activity8_png));
@@ -89,140 +109,149 @@ void wxActTimer::Notify(){
bmpActivity->SetBitmap(activityiconbmp);
intActivityProgress++;
-
+
} else if (intActivityProgress == 8){
-
+
wxMemoryInputStream istream(misc_activity9_png, sizeof(misc_activity9_png));
wxImage misc_activity9_pngi(istream, wxBITMAP_TYPE_PNG);
wxBitmap activityiconbmp(misc_activity9_pngi, -1);
bmpActivity->SetBitmap(activityiconbmp);
-
+
intActivityProgress++;
-
+
} else if (intActivityProgress == 9){
wxMemoryInputStream istream(misc_activity10_png, sizeof(misc_activity10_png));
wxImage misc_activity10_pngi(istream, wxBITMAP_TYPE_PNG);
wxBitmap activityiconbmp(misc_activity10_pngi, -1);
bmpActivity->SetBitmap(activityiconbmp);
-
+
intActivityProgress++;
-
+
} else if (intActivityProgress == 10){
-
+
wxMemoryInputStream istream(misc_activity11_png, sizeof(misc_activity11_png));
wxImage misc_activity11_pngi(istream, wxBITMAP_TYPE_PNG);
wxBitmap activityiconbmp(misc_activity11_pngi, -1);
bmpActivity->SetBitmap(activityiconbmp);
-
+
intActivityProgress++;
-
+
} else if (intActivityProgress == 11){
-
+
wxMemoryInputStream istream(misc_activity12_png, sizeof(misc_activity12_png));
wxImage misc_activity12_pngi(istream, wxBITMAP_TYPE_PNG);
wxBitmap activityiconbmp(misc_activity12_pngi, -1);
bmpActivity->SetBitmap(activityiconbmp);
-
+
intActivityProgress = 0;
-
+
}
-
- wxPostEvent(frmMainPtrProc, shuffleevent);
+ wxPostEvent(frmMainPtrProc, shuffleevent);
+
}
void wxActTimer::SetBitmap(wxStaticBitmap *bitmap)
{
-
+
+ // Set the bitmap for wxActTimer.
+
bmpActivity = bitmap;
-
+
}
void wxActTimer::SetSleepBitmap(wxBitmap *SleepBitmap)
{
-
+
+ // Set the sleep bitmap for wxActTimer.
+
SleepBitmapPtr = SleepBitmap;
-
+
}
void wxActTimer::StopAnimation()
{
-
+
// Stop the icon animation.
-
+
frmMain *frmMainPtrProc = static_cast(frmMainPtr);
-
+
wxCommandEvent actstop(ACTMGR_STOP);
wxPostEvent(frmMainPtrProc, actstop);
- //frmMainPtrProc->ActivityIconStop();
-
+
this->Stop();
bmpActivity->SetBitmap(*SleepBitmapPtr);
+
}
void wxActTimer::StartAnimation()
{
-
+
frmMain *frmMainPtrProc = static_cast(frmMainPtr);
wxCommandEvent actstart(ACTMGR_START);
wxPostEvent(frmMainPtrProc, actstart);
- //frmMainPtrProc->ActivityIconStart();
-
+
this->ResetBitmap();
this->Start(50, FALSE);
+
}
void wxActTimer::ResetBitmap()
{
-
+
+ // Reset the bitmap for wxActTimer.
+
intActivityProgress = 0;
-
+
}
void wxActTimer::SetupPointer(void *frmMainPtrIn)
{
-
+
+ // Setup the pointer for wxActTimer.
+
frmMainPtr = frmMainPtrIn;
-
+
}
void wxActProcessTimer::Notify()
{
-
+
+ // Notify function for wxActProcessTimer.
+
// Pause the timer whilst processing to avoid problems.
-
+
this->Stop();
-
+
// Process Tasks.
-
+
frmActivityMgr *ActMgrPtrProc = static_cast(ActMgrPtr);
ActMgrPtrProc->ProcessTasks();
-
+
}
void wxActProcessTimer::SetupPointers(void *ActMgr){
-
+
+ // Setup pointers for the wxActProcessTimer.
+
ActMgrPtr = ActMgr;
-
+
}
void wxActListProcTimer::Notify(){
-
+
+ // Notify function for wxActListProcTimer.
+
// Setup Label and get task data (update SetupPointers subroutine).
-
+
this->Stop();
-
- for (std::map::iterator iter = ActListPtr->begin();
- iter != ActListPtr->end(); ++iter){
-
- // Check for any queued tasks and start one.
-
- if (iter->second > 4){
- continue;
- }
-
-
+
+ for (std::map::iterator iter = ActListPtr->begin();
+ iter != ActListPtr->end(); ++iter){
+
+ // Check for any queued tasks and start one.
+
// 0 = Queued.
// 1 = Processing.
// 2 = Failed.
@@ -231,74 +260,101 @@ void wxActListProcTimer::Notify(){
// 5 = Failed (UI Updated).
// 6 = Stopped (UI Updated).
// 7 = (Reserved) (UI Updated).
- // 8 = Completed. (UI Updated).
-
+ // 8 = Completed. (UI Updated).
+
std::map::iterator LongIter = ActListUIPtr->find(iter->first);
- std::map::iterator DetailIter = ActListDetailPtr->find(iter->first);
+
+ if (iter->second > 4){
+
+ continue;
+ }
+
+ std::map::iterator DetailIter = ActListDetailPtr->find(iter->first);
+
+ wxCommandEvent uevent(ACTMGR_UPDATESTATUSLABEL);
+ ActivityMgrLabelUpdate *ueventdata = new ActivityMgrLabelUpdate;
+ uevent.SetClientData(ueventdata);
+
if (iter->second == 1){
-
- lstActivityPtr->SetItem(LongIter->second, 2, _("Processing..."));
- if (ActListDetailPtr->find(iter->first) != ActListDetailPtr->end()){
- lblDetailsPtr->SetLabel(_("Adding Contact '") + DetailIter->second + _("'..."));
- }
- //CardDAVIter->second.
-
+
+ ueventdata->ItemIndex = LongIter->second;
+ ueventdata->ItemLabel = _("Processing...");
+
+ wxPostEvent(static_cast(ActMgrPtr), uevent);
+
} else if (iter->second == 2){
-
- lstActivityPtr->SetItem(LongIter->second, 2, _("Failed"));
- iter->second = 5;
-
- } else if (iter->second == 3){
+
+ ueventdata->ItemIndex = LongIter->second;
+ ueventdata->ItemLabel = _("Failed");
+
+ wxPostEvent(static_cast(ActMgrPtr), uevent);
+ iter->second = 5;
- lstActivityPtr->SetItem(LongIter->second, 2, _("Stopped"));
- iter->second = 6;
-
+ } else if (iter->second == 3){
+
+ ueventdata->ItemIndex = LongIter->second;
+ ueventdata->ItemLabel = _("Stopped");
+
+ wxPostEvent(static_cast(ActMgrPtr), uevent);
+ iter->second = 5;
+
} else if (iter->second == 4){
-
- lstActivityPtr->SetItem(LongIter->second, 2, _("Completed"));
+
+ ueventdata->ItemIndex = LongIter->second;
+ ueventdata->ItemLabel = _("Completed");
+
+ wxPostEvent(static_cast(ActMgrPtr), uevent);
iter->second = 8;
-
+
}
-
+
// Insert a finish date.
-
+
wxDateTime adt;
adt = adt.Now();
-
+
ActListFinDTPtr->insert(std::make_pair(iter->first, adt));
-
- }
+
+ // Delete the connection object.
- if (ClearupProcessed == TRUE){
+ std::map::iterator ConnObject = ActListConnPtr->find(iter->first);
+ delete ConnObject->second;
+ ConnObject->second = NULL;
+ }
+
+ if (ClearupProcessed == TRUE){
+
// Clear up processed items.
-
+
// Delete the processed items.
-
+
ClearupProcessed = FALSE;
-
+
}
-
+
if (*TasksActivePtr == FALSE){
-
+
ActTimerPtr->StopAnimation();
lblDetailsPtr->SetLabel(_("No activity."));
-
+
} else {
-
+
this->Start();
-
+
}
-
+
}
-void wxActListProcTimer::SetupPointers(std::map *ActList, std::map *ActListUI,
- std::map *ActListDetail, bool *TasksActive,
- wxListCtrl *lstActivity, wxStaticText *lblDetails, wxGauge *GauProgress,
- void *ActMgr, wxActTimer *ActTimer, wxActProcessTimer *ActProcessTimer,
- std::map *ActListFinDT){
-
+void wxActListProcTimer::SetupPointers(std::map *ActList, std::map *ActListUI,
+ std::map *ActListDetail, bool *TasksActive,
+ wxListCtrl *lstActivity, wxStaticText *lblDetails, wxGauge *GauProgress,
+ void *ActMgr, wxActTimer *ActTimer, wxActProcessTimer *ActProcessTimer,
+ std::map *ActListFinDT, std::map *ActListConn){
+
+ // Setup the pointers for wxActListProcTimer.
+
ActListPtr = ActList;
ActListUIPtr = ActListUI;
ActListDetailPtr = ActListDetail;
@@ -310,53 +366,55 @@ void wxActListProcTimer::SetupPointers(std::map *ActList, std::map::iterator ETagIter;
-
- for (ETagIter = ETagDBList.begin();
- ETagIter != ETagDBList.end(); ++ETagIter){
-
+
+ for (ETagIter = ETagDBList.begin();
+ ETagIter != ETagDBList.end(); ++ETagIter){
+
if (ETagIter->second.GetWriteStatus() == TRUE){
-
+
ETagIter->second.WriteETagDB();
-
+
}
-
+
}
-
-
+
+
}
void wxETagProcessTimer::ReloadAccounts(){
-
+
// Get the account preferences file and setup each database accordingly.
-
+
ReloadLock.lock();
-
+
// Stop the timer.
-
+
this->Stop();
ETagDBList.clear();
-
- wxString PrefFilename = GetUserPrefDir();
-
+
+ wxString PrefFilename = GetUserPrefDir();
+
XABPreferences PrefData(PrefFilename);
-
+
wxString AccountName;
wxString AccountDir;
wxString AccountAddress;
@@ -364,233 +422,198 @@ void wxETagProcessTimer::ReloadAccounts(){
wxString AccountPassword;
wxString AccountPrefix;
wxString AccountType;
-
+
// Look for the account and get the friendly name for the account.
-
+
for (int i = 0; i < PrefData.accounts.GetCount(); i++){
-
+
AccountDir = PrefData.accounts.GetAccountDirectory(i);
AccountType = PrefData.accounts.GetAccountType(i);
-
- if (AccountType == wxT("Local") || AccountType == wxT("local")){
+
+ if (AccountDir.IsEmpty()){
continue;
}
-
+
+ if (AccountType == wxT("Local") || AccountType == wxT("local")){
+ continue;
+ }
+
AccountDir.Trim();
AccountDir.Append(wxT(".carddav"));
-
+
ETagDB AccountDB;
AccountDB.SetupDB(AccountDir);
-
+
ETagDBList.insert(std::make_pair(AccountDir, AccountDB));
-
+
AccountDir.clear();
-
+
}
-
- //raise(SIGABRT);
-
- /*for (int i = 0; i < PrefData.accounts.GetCount(); i++){
-
- AccountDir = PrefData.accounts.GetAccountDirectory(i);
-
- AccountDir.Trim();
- AccountDir.Append(wxT(".carddav"));
-
- //AccountPrefix = PrefData.accounts.GetAccountDirPrefix(i);
-
- //ETagDB NewETagDB (AccountDir);
-
- ETagDB AccountDB;
- AccountDB.SetupDB(AccountDir);
-
- //ETagDBList.insert(std::make_pair(AccountDir, Moo));
-
- //std::pair Moo2;
-
- //ETagDB2 Meep;
-
- //ETagDBListv3.insert(std::make_pair(0,Meep));
-
- //ETagDBListv2.insert(std::make_pair(0, Moo));
-
- //ETagDBList.insert(Moo2);
-
- ETagDBList.insert(std::make_pair(AccountDir, AccountDB));
-
- //Moo55.insert(std::make_pair(wxT("Meep"), wxT("Meep")));
-
- //ETagDBList[AccountDir] = new ETagDB (AccountDir);
-
- }*/
-
- //ETagDB Test (AccountDir);
-
- //ETagDBList.insert(std::make_pair(AccountDir, Test));
-
+
ReloadLock.unlock();
this->Start(15000);
-
+
}
ETagDB* wxETagProcessTimer::GetPointer(wxString AccountName){
-
+
+ // Get the pointer of the ETag Database.
+
ETagDB *ETagDBPtr = NULL;
-
+
std::map::iterator ETagIter;
-
+
ETagIter = ETagDBList.find(AccountName);
if (ETagIter != ETagDBList.end()){
-
+
ETagDBPtr = &ETagIter->second;
-
+
}
return ETagDBPtr;
-
+
}
void wxContactFileMonitorTimer::Notify(){
-
+
+ // Notify function for wxContactFileMonitorTimer.
+
if (Filename.IsEmpty()){
-
+
return;
-
+
}
-
+
wxFileName FileCheck(Filename);
wxDateTime CurrentDateTime;
-
+
CurrentDateTime = FileCheck.GetModificationTime();
-
+
if (FileDateTime != CurrentDateTime){
-
+
// The dates & times of the file are different.
// Send an event to notify the user of this change.
-
+
wxCommandEvent dateevent(wxEVT_COMMAND_BUTTON_CLICKED);
wxPostEvent(frmCEPtr, dateevent);
-
+
}
-
+
}
void wxContactFileMonitorTimer::SetFilename(wxString FilenameInc){
-
+
+ // Set the filename for the wxContactFileMonitorTimer object.
+
Filename = FilenameInc;
-
+
wxFileName FileCheck(Filename);
FileDateTime = FileCheck.GetModificationTime();
-
+
}
void wxContactFileMonitorTimer::SetupPointers(frmContactEditor *frmCEPtrInc){
-
+
+ // Setup the pointers for the wxContactFileMonitorTimer object.
+
frmCEPtr = frmCEPtrInc;
-
+
}
void wxContactFileMonitorTimer::UpdateTimestamp(){
-
+
+ // Update the timestamp for the wxContactFileMonitorTimer object.
+
wxFileName FileCheck(Filename);
FileDateTime = FileCheck.GetModificationTime();
-
+
}
void wxContactWindowMonitor::Notify(){
-
- // Look through the list of windows and see if any have
- // closed. IF they have closed then delete and free the
- // memory (also delete from the map).
-
- /*for(std::map::iterator iter = ContactWindowListPtr->begin();
- iter != ContactWindowListPtr->end(); iter++){
-
- frmContact *ContactPtr = (frmContact*)iter->second;
-
- // Check if open.
-
- if (
-
- // Delete the form.
-
- // Delete the data from the map.
-
- }*/
-
+
+ // Notify function for the wxContactWindowMonitor object.
+
}
void wxContactWindowMonitor::SetupPointers(std::map *ContactWindowListPtrInc){
-
+
+ // Setup pointers for the wxContactWindowMonitor.
+
ContactWindowListPtr = ContactWindowListPtrInc;
-
+
}
void wxAccountSyncTimer::Notify(){
-
+
+ // Notify function for the wxAccountSyncTimer.
+
frmActivityMgr *ActMgrPtrProc = static_cast(frmActMgrPtr);
-
+
// Disable the timer. (Don't go updating unless needed).
-
+
this->Stop();
-
+
if (ActMgrPtrProc->GetTaskStatus(intTaskID) < 2){
-
+
this->Start();
return;
-
+
}
-
+
// Add task to the activity manager.
-
+
intTaskID = ActMgrPtrProc->AddTask(3, wxT(""), AccName,
- wxT(""), wxT(""), wxT(""), wxT(""));
-
+ wxT(""), wxT(""), wxT(""), wxT(""));
+
// Go to sleep and wait for the task to be completed.
-
+
// Enable the timer as we are now finished syncronising.
-
+
this->Start();
-
+
}
void wxAccountSyncTimer::SetupData(wxString AccNameInc,
- wxString AccNameFullInc){
-
+ wxString AccNameFullInc){
+
+ // Setup the data for the wxAccountSyncTimer object.
+
// Set the account name.
-
+
AccName = AccNameInc;
AccNameFull = AccNameFullInc;
-
+
}
void wxAccountSyncTimer::SetupPointers(void *frmMainPtrInc,
- void *frmActMgrPtrInc, ETagDB *ETagDBPtrInc){
-
- // Set the pointers.
-
+ void *frmActMgrPtrInc, ETagDB *ETagDBPtrInc){
+
+ // Setup the pointers for the wxAccountSyncTimer object.
+
frmMainPtr = frmMainPtrInc;
frmActMgrPtr = frmActMgrPtrInc;
ETagDBPtr = ETagDBPtrInc;
-
+
}
void SleepFor(unsigned long longSleepNanoSecs){
-
+
+ // Sleep for specified nano seconds.
+
#ifdef __WIN32__
::Sleep((longSleepNanoSecs / 1000000));
#elif __HAIKU__
-
+
#else
-
+
timespec n1, n2;
-
+
n1.tv_sec = 0;
n1.tv_nsec = longSleepNanoSecs;
-
+
nanosleep(&n1, &n2);
-
+
#endif
-
+
}
\ No newline at end of file