Pārlūkot izejas kodu

Organizational Parameters
Title
role
department
company

working now


git-svn-id: svn://svn.siningsoft.de/Sailfish_Contacts_Restore@7 9ea9dde1-eeb2-4aae-9f27-8a0df3aa35ee

devnull 4 gadi atpakaļ
vecāks
revīzija
b50f7188ae

+ 137 - 0
ContactRescue.py

@@ -0,0 +1,137 @@
+# Doc
+#  Script to extract Contacts from Sailfish Contact SQLite DB located at 
+#
+#  
+# Links
+#  FileFormatdescription: https://docs.fileformat.com/email/vcf/#vcf-30-example
+#  Pytho vobject: http://eventable.github.io/vobject/
+
+# ChangeLog
+#  2021-08-03 - multiple E-Mails with different types are working correctly
+
+import sqlite3
+import vobject
+import uuid
+
+SQLconn = sqlite3.connect('Testdata/contacts_with-Phone-Mobile-Fax-Pager-Assistent.db')
+
+
+try:
+    SQLContCur = SQLconn.cursor()
+    for row in SQLContCur.execute('SELECT * FROM Contacts'):
+        
+            # contactID abfragen
+            contactID=row[0]
+            
+            # wir erstellen das Objekt
+            vcf = vobject.vCard()
+            
+            vcf.add('uid').value = str(uuid.uuid4())
+            #vcf.add('uid').value = "Testdaten"
+            vcf.add('n').value = vobject.vcard.Name( family=row[6], given=row[4] )
+            vcf.add('fn').value =row[1]
+            
+            print("debug: Contact " + row[1])
+            
+            
+            ## Abfragen Organisation
+            SQLORGCur = SQLconn.cursor()
+            for ORGrow in SQLORGCur.execute('SELECT * from Organizations where contactId = ' + str(contactID)):
+                org = vcf.add('ORG').value =  [str(ORGrow[2]), str(ORGrow[6])]
+                
+                if ORGrow[4] is not None:
+                    title = vcf.add('TITLE').value = str(ORGrow[4])
+                
+                if ORGrow[3] is not None:
+                    role = vcf.add('ROLE').value = str(ORGrow[3])
+                
+                # Also parameters are possible. Could be read out
+                # | columnID | column        |
+                # ----------------------------
+                # |     0    | detailId	     |
+                # |     1    | contactId     |
+                # |     2    | name	         |
+                # |     3    | role	         |
+                # |     4    | title         |
+                # |     5    | location	     |
+                # |     6    | department    |
+                # |     7    | logoUrl       |
+                # |     8    | assistantName |
+
+            
+            ## Abfragen E-Mail-Adressen
+            SQLEmailCur = SQLconn.cursor()
+            for Emailrow in SQLEmailCur.execute('SELECT * from EmailAddresses JOIN Details on Details.detailId= EmailAddresses.detailId where EmailAddresses.contactId = ' + str(contactID)):
+                
+                # debug ausgabe
+                print("...debug: " + str(Emailrow[2]) + " at " + str(Emailrow[9]))
+                
+                email = vcf.add('email')
+                email.value = str(Emailrow[2])
+    
+                # nur den Typ einpflegen, wenn das hier nicht none ist
+                if Emailrow[9] != None:
+                    email.type_param = str(Emailrow[9])
+
+
+            SQLPhoneCur = SQLconn.cursor()
+            
+            ## Abfragen Telefonnummer, Fax, SMS - Nummern kommen aus der gleichen Tabelle
+            for Phonerow in SQLPhoneCur.execute('SELECT * from PhoneNumbers JOIN Details on Details.detailId = PhoneNumbers.detailId where PhoneNumbers.contactId = ' + str(contactID)):
+                
+                # wir müssen die SubTypen unterscheiden
+                #Null	voice
+                #1	cell
+                #2	fax
+                #3	pager
+                #6	video
+                #10	Assistent
+                
+                
+                # debug ausgabe
+                print("...debug: " + str(Phonerow[2]) + " at " + str(Phonerow[10]) + " subtype=" + str(Phonerow[3]))
+                
+                # None is a normal phone Number
+
+
+                if Phonerow[3] == "1":
+                    phcat='cell'
+                elif Phonerow[3] == "2":
+                    phcat='fax'
+                elif Phonerow[3] == "3":
+                    phcat='pager'
+                elif Phonerow[3] == "6":
+                    phcat='video'
+                elif Phonerow[3] == "10":
+                    phcat='assistent'
+                elif Phonerow[3] is None:
+                    phcat='voice'
+                
+                print("...debug: " + phcat)
+
+                phone = vcf.add(phcat).value = str(Phonerow[2])
+                
+                # nur den Typ einpflegen, wenn das hier nicht none ist
+                if Phonerow[10] != None:
+                    try:
+                        phone.type_param = str(Phonerow[10])
+                    except AttributeError:
+                        continue
+
+            # Ausgabe
+            print(vcf.serialize())
+
+# hier brauchen wir einige eception handles -> wie bekommen wir die einzelnen exceptions heruas ?
+#except:
+    #print("Error in executing SQL")
+    
+    
+except AttributeError:
+    print("Datatype mismatch")
+    raise
+
+# das generöse Except am Ende    
+except:
+    print("unhandled error")
+    raise
+

BIN
Testdata/contacts_with-Phone-Mobile-Fax-Pager-Assistent.db


+ 0 - 0
test/ContactRescue_1.py


+ 5 - 0
test/functions.py

@@ -0,0 +1,5 @@
+def Query(msg,cat):
+    print("alerting " + str(msg) + " in category " + cat)
+    
+    
+Query("Testnachricht","Testkategorie")