summaryrefslogtreecommitdiffstats
path: root/conduits/abbrowserconduit/abbrowser-conduit.h
diff options
context:
space:
mode:
Diffstat (limited to 'conduits/abbrowserconduit/abbrowser-conduit.h')
-rw-r--r--conduits/abbrowserconduit/abbrowser-conduit.h222
1 files changed, 222 insertions, 0 deletions
diff --git a/conduits/abbrowserconduit/abbrowser-conduit.h b/conduits/abbrowserconduit/abbrowser-conduit.h
new file mode 100644
index 0000000..22e9446
--- /dev/null
+++ b/conduits/abbrowserconduit/abbrowser-conduit.h
@@ -0,0 +1,222 @@
+#ifndef _ABBROWSER_CONDUIT_H
+#define _ABBROWSER_CONDUIT_H
+/* abbrowser-conduit.h KPilot
+**
+** Copyright (C) 2000,2001 by Dan Pilone
+** Copyright (C) 2000 Gregory Stern
+** Copyright (C) 2002-2003 by Reinhold Kainhofer
+**
+*/
+
+/*
+** This program 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; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program 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 this program in a file called COPYING; if not, write to
+** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+** MA 02110-1301, USA.
+*/
+
+/*
+** Bug reports and questions can be sent to [email protected]
+*/
+
+
+#include <kabc/addressbook.h>
+
+#include <pilotAddress.h>
+#include <plugin.h>
+
+#include "kabcRecord.h"
+
+
+class ResolutionTable;
+namespace KABC
+{
+class Addressee;
+class Address;
+class PhoneNumber;
+class Ticket;
+}
+
+using namespace KABC;
+
+typedef TQValueList<recordid_t> RecordIDList;
+
+class AbbrowserConduit : public ConduitAction
+{
+Q_OBJECT
+public:
+ AbbrowserConduit(KPilotLink *o,const char *n = 0L,
+ const TQStringList &a = TQStringList() );
+ virtual ~AbbrowserConduit();
+
+/*********************************************************************
+ S Y N C S T R U C T U R E
+ *********************************************************************/
+ virtual bool exec();
+protected slots:
+ void slotPalmRecToPC();
+ void slotPCRecToPalm();
+ void slotDeletedRecord();
+ void slotDeleteUnsyncedPCRecords();
+ void slotDeleteUnsyncedHHRecords();
+ void slotCleanup();
+
+ void slotTestRecord();
+
+private:
+
+ /********************************************************/
+ /* Handle the configuration */
+ /********************************************************/
+
+ /* Read the global KPilot config file for settings
+ * particular to the AbbrowserConduit conduit. */
+ void readConfig();
+
+ void showPilotAddress(const PilotAddress *pilotAddress);
+ void showAddresses(
+ const Addressee &pcAddr,
+ const PilotAddress *backupAddr,
+ const PilotAddress *palmAddr);
+
+
+ /********************************************************/
+ /* Loading and saving the addressbook and database */
+ /********************************************************/
+
+
+ /* Given a list of contacts, creates the pilot id to contact key map
+ * and a list of new contacts in O(n) time (single pass) */
+ void _mapContactsToPilot( TQMap < recordid_t, TQString> &idContactMap);
+ /* Do the preperations before doSync or doBackup.
+ * Load contacts, set the pilot */
+ bool _prepare();
+ /* Load the contacts from the addressbook.
+ * @return true if successful, false if not */
+ bool _loadAddressBook();
+ /* Save the contacts back to the addressbook.
+ * @return true if successful, false if not */
+ bool _saveAddressBook();
+ void _getAppInfo();
+ void _setAppInfo();
+
+ void _cleanupAddressBookPointer();
+
+
+
+/*********************************************************************
+ G E N E R A L S Y N C F U N C T I O N
+ These functions modify the Handheld and the addressbook
+ *********************************************************************/
+ bool syncAddressee(Addressee &pcAddr, PilotAddress*backupAddr,
+ PilotAddress*palmAddr);
+ bool _copyToHH(Addressee &pcAddr, PilotAddress*backupAddr,
+ PilotAddress*palmAddr);
+ bool _copyToPC(Addressee &pcAddr, PilotAddress*backupAddr,
+ PilotAddress*palmAddr);
+ bool _writeBackup(PilotAddress *backup);
+ bool _deleteAddressee(Addressee &pcAddr, PilotAddress*backupAddr,
+ PilotAddress*palmAddr);
+
+
+/*********************************************************************
+ l o w - l e v e l f u n c t i o n s f o r
+ adding / removing palm/pc records
+ *********************************************************************/
+ bool _savePalmAddr(PilotAddress *palmAddr, Addressee &pcAddr);
+ bool _savePCAddr(Addressee &pcAddr, PilotAddress*backupAddr,
+ PilotAddress*palmAddr);
+
+
+/*********************************************************************
+ C O P Y R E C O R D S
+ *********************************************************************/
+ inline bool _equal(const TQString & str1, const TQString & str2) const
+ {
+ return (str1.isEmpty() && str2.isEmpty()) || (str1 == str2);
+ } ;
+ typedef enum eqFlagsType
+ {
+ eqFlagsName=0x1,
+ eqFlagsAdress=0x2,
+ eqFlagsPhones=0x4,
+ eqFlagsNote=0x8,
+ eqFlagsCategory=0x10,
+ eqFlagsFlags=0x20,
+ eqFlagsCustom=0x40,
+ eqFlagsAll=0xFFFF,
+ eqFlagsAlmostAll=eqFlagsName|eqFlagsAdress|eqFlagsPhones|eqFlagsNote|eqFlagsCustom
+ };
+ bool _equal(const PilotAddress *piAddress, const Addressee &abEntry,
+ enum eqFlagsType flags=eqFlagsAll) const;
+
+/*********************************************************************
+ C O N F L I C T R E S O L U T I O N a n d M E R G I N G
+ *********************************************************************/
+ /** smartly merge the given field for the given entry. use the
+ * backup record to determine which record has been modified
+ * @pc, @backup, @palm ... entries of the according databases
+ * @returns string of the merged entries.
+ */
+ TQString _smartMergeString(const TQString &pc, const TQString & backup,
+ const TQString & palm, ConflictResolution confRes);
+ bool _buildResolutionTable(ResolutionTable*tab, const Addressee &pcAddr,
+ PilotAddress *backupAddr, PilotAddress *palmAddr);
+ bool _applyResolutionTable(ResolutionTable*tab, Addressee &pcAddr,
+ PilotAddress *backupAddr, PilotAddress *palmAddr);
+ bool _smartMergeTable(ResolutionTable*tab);
+ /** Merge the palm and the pc entries with the additional
+ * information of the backup record. Calls _smartMerge
+ * which does the actual syncing of the data structures.
+ * According to the return value of _smartMerge, this function
+ * writes the data back to the palm/pc.
+ * return value: no meaning yet
+ */
+ bool _smartMergeAddressee(Addressee &pcAddr, PilotAddress *backupAddr,
+ PilotAddress *palmAddr);
+ Addressee _findMatch(const PilotAddress & pilotAddress) const;
+
+
+/********************************************************/
+/* D A T A M E M B E R S , S E T T I N G S */
+/********************************************************/
+
+ AddressBook* aBook;
+
+ PilotAddressInfo *fAddressAppInfo;
+
+ KABCSync::Settings fSyncSettings;
+
+ int pilotindex;
+ bool abChanged;
+ /** addresseeMap maps record ids to IDs of Addressees. This is used to speed up searching the local addressbook */
+ TQMap < recordid_t, TQString> addresseeMap;
+ RecordIDList syncedIds, allIds;
+ TQString fABookFile;
+ AddressBook::Iterator abiter;
+ /** For a local file resource, we need to obtain a saveTicket
+ * when opening the abook, just in case we want to modify it
+ * at all.
+ */
+ Ticket *fTicket;
+ bool fCreatedBook;
+
+ /** if we add a resource from the addressbook, track it to remove it
+ * later...
+ */
+ KABC::Resource *fBookResource;
+
+
+} ;
+
+#endif