bug fixes to make outlook work
[bbdb-csv-import] / bbdb3-csv-import.el
index b644e52426e49369531d2b74f0c88fc5d317af7b..9abd27e862f5b4c791e357363d7c3c29246ad31d 100644 (file)
@@ -46,6 +46,8 @@
 ;; (setq bbdb3-csv-import-mapping-table bbdb3-csv-import-thunderbird)
 ;; (setq bbdb3-csv-import-mapping-table bbdb3-csv-import-gmail)
 ;; (setq bbdb3-csv-import-mapping-table bbdb3-csv-import-linkedin)
 ;; (setq bbdb3-csv-import-mapping-table bbdb3-csv-import-thunderbird)
 ;; (setq bbdb3-csv-import-mapping-table bbdb3-csv-import-gmail)
 ;; (setq bbdb3-csv-import-mapping-table bbdb3-csv-import-linkedin)
+;; (setq bbdb3-csv-import-mapping-table bbdb3-csv-import-outlook-web)
+;; 
 ;;
 ;; Simply call `bbdb3-csv-import-buffer' or
 ;; `bbdb3-csv-import-file'. Interactively they prompt for file/buffer. Use
 ;;
 ;; Simply call `bbdb3-csv-import-buffer' or
 ;; `bbdb3-csv-import-file'. Interactively they prompt for file/buffer. Use
@@ -63,7 +65,9 @@
 ;;   do M-x bbdb then .* then C-u * d on the beginning of a record.
 ;; - After changing a mapping table, don't forget to re-execute
 ;;   (setq bbdb3-csv-import-mapping-table ...) so that it propagates.
 ;;   do M-x bbdb then .* then C-u * d on the beginning of a record.
 ;; - After changing a mapping table, don't forget to re-execute
 ;;   (setq bbdb3-csv-import-mapping-table ...) so that it propagates.
-;; 
+;;
+;; Todo: It would be nice if we would programatically or manually merge all the
+;; mapping tables, then we would not have to set one.
 
 (require 'pcsv)
 (require 'dash)
 
 (require 'pcsv)
 (require 'dash)
 
 
 ;; note. PO Box and Extended Address are added as additional address street lines if they exist.
 
 
 ;; note. PO Box and Extended Address are added as additional address street lines if they exist.
-;; If you don't like this, you can remove them. If you want some other special handling, it will need to be coded.
+;; If you don't like this, just delete them from this fiel.
+;; If you want some other special handling, it will need to be coded.
 (defconst bbdb3-csv-import-gmail
   '(("firstname" "Given Name")
     ("lastname" "Family Name")
 (defconst bbdb3-csv-import-gmail
   '(("firstname" "Given Name")
     ("lastname" "Family Name")
      (repeat ("Custom Field 1 - Type" "Custom Field 1 - Value"))))
   "Gmail csv export format")
 
      (repeat ("Custom Field 1 - Type" "Custom Field 1 - Value"))))
   "Gmail csv export format")
 
+
 (defconst bbdb3-csv-import-gmail-typed-email
   (append  (car (last bbdb3-csv-import-gmail)) '((repeat "E-mail 1 - Type")))
   "Like the first Gmail mapping, but use custom fields to store
 (defconst bbdb3-csv-import-gmail-typed-email
   (append  (car (last bbdb3-csv-import-gmail)) '((repeat "E-mail 1 - Type")))
   "Like the first Gmail mapping, but use custom fields to store
    people don't use those labels and using the default labels
    would create useless custom fields.")
 
    people don't use those labels and using the default labels
    would create useless custom fields.")
 
+(defconst bbdb3-csv-import-outlook-typed-email
+  (append  (car (last bbdb3-csv-import-outlook-web)) '((repeat "E-mail 1 - Type")))
+  "Like the previous var, but for outlook-web.
+Adds email labels as custom fields.")
+
+
+(defconst bbdb3-csv-import-outlook-web
+  '(("firstname" "First Name")
+    ("lastname" "Last Name")
+    ("middlename" "Middle Name")
+    ("mail" "E-mail Address" "E-mail 2 Address" "E-mail 3 Address")
+    ("phone"
+     "Assistant's Phone" "Business Fax" "Business Phone"
+     "Business Phone 2" "Callback" "Car Phone"
+     "Company Main Phone" "Home Fax" "Home Phone"
+     "Home Phone 2" "ISDN" "Mobile Phone"
+     "Other Fax" "Other Phone" "Pager"
+     "Primary Phone" "Radio Phone" "TTY/TDD Phone" "Telex")
+    ("address"
+     (("business address"
+       (("Business Street")
+        "Business City" "Business State"
+        "Business Postal Code" "Business Country"))
+      ("home address"
+       (("Home Street")
+        "Home City" "Home State"
+        "Home Postal Code" "Home Country"))
+      ("other address"
+       (("Other Street" "")
+        "Other City" "Other State"
+        "Other Postal Code" "Other Country"))))
+    ("organization" "Company")
+    ("xfields"
+     "Anniversary" "Family Name Yomi" "Given Name Yomi"
+     "Suffix" "Department" "Job Title" "Birthday" "Manager's Name" "Notes"
+     "Spouse" "Web Page"))
+  "Hotmail.com, outlook.com, live.com, etc.
+Based on 'Export for outlook.com and other services',
+not the export for Outlook 2010 and 2013.")
+
+
 (defvar bbdb3-csv-import-mapping-table nil
   "The table which maps bbdb3 fields to csv fields.
 Use the default as an example to map non-thunderbird data.
 (defvar bbdb3-csv-import-mapping-table nil
   "The table which maps bbdb3 fields to csv fields.
 Use the default as an example to map non-thunderbird data.
@@ -255,7 +302,7 @@ Defaults to current buffer."
                       ;; need to be grouped in a list because they contain sublists that we
                       ;; don't want flattened. I've decided that is a better trade off than more
                       ;; complex code.
                       ;; need to be grouped in a list because they contain sublists that we
                       ;; don't want flattened. I've decided that is a better trade off than more
                       ;; complex code.
-                      (flatten1 (expand-repeats (cdr (assoc bbdb-arg bbdb3-csv-import-mapping-table)))))
+                      (flatten1 (expand-repeats (cdr (assoc root-mapping bbdb3-csv-import-mapping-table)))))
            (map-assoc (field)
                       ;; For mappings with just 1 simple csv-field, get it's data
                       (assoc-plus (car (map-bbdb3 field)) csv-record)))
            (map-assoc (field)
                       ;; For mappings with just 1 simple csv-field, get it's data
                       (assoc-plus (car (map-bbdb3 field)) csv-record)))
@@ -286,7 +333,9 @@ Defaults to current buffer."
                              (let ((address-lines (mapcar-assoc (caadr mapping-elem)))
                                    (address-data (mapcar-assoc (cdadr mapping-elem)))
                                    (elem-name (car mapping-elem)))
                              (let ((address-lines (mapcar-assoc (caadr mapping-elem)))
                                    (address-data (mapcar-assoc (cdadr mapping-elem)))
                                    (elem-name (car mapping-elem)))
-                               
+                               ;; outlook-web has 1 address line, bbdb requires 2
+                               (if (= (length address-lines) 1)
+                                   (setq address-lines (append address-lines '(""))))
                                (when (consp elem-name)
                                  (setq elem-name (cdr (assoc (car elem-name) csv-record))))
                                
                                (when (consp elem-name)
                                  (setq elem-name (cdr (assoc (car elem-name) csv-record))))