summaryrefslogtreecommitdiffstats
path: root/kpilot/conduits/abbrowserconduit/kabcRecord.h
diff options
context:
space:
mode:
Diffstat (limited to 'kpilot/conduits/abbrowserconduit/kabcRecord.h')
-rw-r--r--kpilot/conduits/abbrowserconduit/kabcRecord.h263
1 files changed, 263 insertions, 0 deletions
diff --git a/kpilot/conduits/abbrowserconduit/kabcRecord.h b/kpilot/conduits/abbrowserconduit/kabcRecord.h
new file mode 100644
index 00000000..13a3e269
--- /dev/null
+++ b/kpilot/conduits/abbrowserconduit/kabcRecord.h
@@ -0,0 +1,263 @@
+#ifndef _KPILOT_KABCRECORD_H
+#define _KPILOT_KABCRECORD_H
+/* KPilot
+**
+** Copyright (C) 2000,2001 by Dan Pilone
+** Copyright (C) 2002-2003 by Reinhold Kainhofer
+** Copyright (C) 2007 by Adriaan de Groot <groot@kde.org>
+**
+** The abbrowser conduit copies addresses from the Pilot's address book to
+** the KDE addressbook maintained via the kabc library. This file
+** deals with the actual copying of HH addresses to KABC addresses
+** and back again.
+*/
+
+/*
+** 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 kde-pim@kde.org.
+*/
+
+#include <qvaluevector.h>
+
+#include <kabc/phonenumber.h>
+
+#include "pilotAddress.h"
+
+#define SYNCNONE 0
+#define SYNCMOD 1
+#define SYNCDEL 3
+
+namespace KABCSync
+{
+ // This duplicates values from the config settings,
+ // and must be kept in sync if new settings are added
+ // -- there are compile time checks for this in the
+ // abbrowser conduit code.
+ enum MappingForOtherPhone {
+ eOtherPhone=0,
+ eAssistant,
+ eBusinessFax,
+ eCarPhone,
+ eEmail2,
+ eHomeFax,
+ eTelex,
+ eTTYTTDPhone
+ } ;
+
+ enum MappingForCustomField {
+ eCustomField=0,
+ eCustomBirthdate,
+ eCustomURL,
+ eCustomIM
+ } ;
+
+ class Settings
+ {
+ public:
+ Settings();
+ QString dateFormat() const
+ {
+ return fDateFormat;
+ }
+ void setDateFormat(const QString& s)
+ {
+ fDateFormat = s;
+ }
+
+ const QValueVector<int> &customMapping() const
+ {
+ return fCustomMapping;
+ }
+ void setCustomMapping(const QValueVector<int> &v)
+ {
+ if (v.count()==4)
+ {
+ fCustomMapping = v;
+ }
+ }
+ int custom(int index) const
+ {
+ if ( (index<0) || (index>3) )
+ {
+ return 0;
+ }
+ else
+ {
+ return fCustomMapping[index];
+ }
+ }
+
+ int fieldForOtherPhone() const
+ {
+ return fOtherPhone;
+ }
+ void setFieldForOtherPhone(int v)
+ {
+ fOtherPhone = v;
+ }
+
+ bool preferHome() const
+ {
+ return fPreferHome;
+ }
+ void setPreferHome(bool v)
+ {
+ fPreferHome = v;
+ }
+
+ int faxTypeOnPC() const
+ {
+ return fFaxTypeOnPC;
+ }
+ void setFaxTypeOnPC(int v)
+ {
+ fFaxTypeOnPC = v;
+ }
+ private:
+ QString fDateFormat;
+ QValueVector<int> fCustomMapping;
+ int fOtherPhone;
+ bool fPreferHome;
+ int fFaxTypeOnPC;
+ } ;
+
+
+ /** Return a list of all the phone numbers (max. 8) set in this
+ * handheld entry @p a . Email entries are ignored.
+ */
+ KABC::PhoneNumber::List getPhoneNumbers(const PilotAddress &a);
+
+ /** Set the phone numbers from @p list in the handheld entry
+ * @p a (with info block @p info providing the mapping of category
+ * names and some other fiddly stuff) as far as possible.
+ * @em No overflow handling is done at all. If the desktop has
+ * more than 5 phone entries, the remainder are dropped.
+ */
+ void setPhoneNumbers(const PilotAddressInfo &info,
+ PilotAddress &a,
+ const KABC::PhoneNumber::List &list);
+
+ /** Given a list of category names from the KDE side (e.g. attached
+ * to a PC-based Addressee) @p categorynames , look for the
+ * category @em best matching the category @p category
+ * in the appinfo block @p info . Here, best is defined as follows:
+ * - if the name of category @p category is in the list, use it
+ * - otherwise use the first category from the list that is a valid
+ * category on the handheld.
+ * - use Pilot::Unfiled if none match.
+ *
+ * @return Category index that best matches.
+ * @return Pilot::Unfiled if no best match.
+ */
+ unsigned int bestMatchedCategory(const QStringList &categorynames,
+ const PilotAddressInfo &info,
+ unsigned int category);
+
+ /** As above, but return the name of the category. */
+ inline QString bestMatchedCategoryName(const QStringList &categorynames,
+ const PilotAddressInfo &info,
+ unsigned int category)
+ {
+ return info.categoryName(
+ bestMatchedCategory(categorynames, info, category));
+ }
+
+ /** Give the addressee @p abEntry the category @p cat (leaving
+ * existing category assignments intact).
+ */
+ void setCategory(KABC::Addressee &abEntry, const QString &cat);
+
+ /* These are string identifiers used for custom properties in the addressees,
+ * used to store KPilot-specific settings.
+ */
+ const QString appString=CSL1("KPILOT"); ///< Identifier for the application
+ const QString flagString=CSL1("Flag"); ///< Flags: synced or not
+ const QString idString=CSL1("RecordID"); ///< Record ID on HH for this addressee
+
+
+ /** Get the string value for HH custom field @p index (0..3) from the addressee
+ * @p abEntry . Which @em actual field this is depends on the mapping
+ * of custom HH fields to PC fields. This mapping is given by the @p customMapping
+ * which may be created from the conduit settings or by hand. Since one of the
+ * possible actual fields is "birthday," which needs formatting, use the date format
+ * string @p dateFormat. If this is empty, use the locale setting.
+ *
+ * @return String value for HH custom field @p index
+ * @return Null QString on error (is also a valid return value)
+ */
+ QString getFieldForHHCustom(
+ unsigned int index,
+ const KABC::Addressee &abEntry,
+ const Settings &settings);
+
+ /** Set a field of the PC @p abEntry address from the custom HH field.
+ * Use value @p value . The value comes from custom field @p index
+ * using the interpretation of custom fields @p customMapping . Because
+ * one of the interpretations includes the birthday, use the date format
+ * @p dateFormat ; if empty, use the local format when setting dates from the HH.
+ */
+ void setFieldFromHHCustom(
+ const unsigned int index,
+ KABC::Addressee &abEntry,
+ const QString &value,
+ const Settings &settings);
+
+ /** The HH has a phone type "other" which may be mapped to any one of
+ * several PC side phone numbers. Return the right one depending in the mapping.
+ *
+ * @note @p mappingForOther should come from AbbrowserSettings::pilotOther()
+ */
+ QString getFieldForHHOtherPhone(const KABC::Addressee &abEntry, const Settings &s);
+
+ /** The HH has a phone type "other" which may be mapped to any one
+ * of several PC side phone numbers. Store the number @p nr in the
+ * PC side phone field indicated by @p mappingForOther .
+ *
+ * @note @p mappingForOther should come from AbbrowserSettings::pilotOther()
+ */
+ void setFieldFromHHOtherPhone(KABC::Addressee &abEntry, const QString &nr, const Settings &s);
+
+ /** Returns the address portion of an addressee. Since the HH can only store
+ * one address, we return the preferred address (if the Addressee @p abEntry
+ * has one) and then either home or business depending on @p preferHome
+ * and if that doesn't exist, the other one and if @em that doesn't exist,
+ * return the preferred home or work address if it exists.
+ */
+ KABC::Address getAddress(const KABC::Addressee &abEntry, const Settings &);
+
+ /** Set the address fields of the HH record from the @p abAddress . */
+ void setAddress(PilotAddress &toPilotAddr, const KABC::Address &abAddress);
+
+ bool isArchived(const KABC::Addressee &);
+ void makeArchived(KABC::Addressee &);
+
+ void copy(PilotAddress &toPilotAddr,
+ const KABC::Addressee &fromAbEntry,
+ const PilotAddressInfo &appInfo,
+ const Settings &syncSettings);
+ void copy(KABC::Addressee &toAbEntry,
+ const PilotAddress &fromPiAddr,
+ const PilotAddressInfo &appInfo,
+ const Settings &syncSettings);
+
+ void showAddressee(const KABC::Addressee &);
+}
+
+#endif
+