added new named id entry generator
authorwsourdeau <wsourdeau@71d39326-ef09-db11-b2a4-00e04c779ad1>
Fri, 17 Dec 2010 15:12:21 +0000 (15:12 +0000)
committerwsourdeau <wsourdeau@71d39326-ef09-db11-b2a4-00e04c779ad1>
Fri, 17 Dec 2010 15:12:21 +0000 (15:12 +0000)
git-svn-id: https://svn.openchange.org/openchange@2398 71d39326-ef09-db11-b2a4-00e04c779ad1

branches/sogo/libmapi/conf/append-prop.py [new file with mode: 0755]

diff --git a/branches/sogo/libmapi/conf/append-prop.py b/branches/sogo/libmapi/conf/append-prop.py
new file mode 100755 (executable)
index 0000000..ac0e89f
--- /dev/null
@@ -0,0 +1,107 @@
+#!/usr/bin/python
+###################################################
+#
+# script that produces stub entries for missing properties passed as parameter in the form oldguid:olid
+#   example:
+#       ./append-prop.py 00062008-0000-0000-c000-000000000046:858d outputs this:
+#       PidLidUnknownProperty858d      LID_UNKNOWN_PROPERTY_858d       0x858d  NULL    PT_NULL MNID_ID PSETID_Common   0x84f5
+#
+# As the MAPI data type is unknown, it needs to be filled in as requests are performed by outlook on the mapped id.
+# Also, note that the output is performed on stdout.
+#
+# Copyright (C) Wolfgang Sourdeau 2010
+# released under the GNU GPL v2
+#
+
+import sys
+
+filename = "mapi-named-properties"
+
+def getLineID(line):
+    idPos = line.rfind("0x")
+    if idPos < len(line) - 8:
+        lineID = -1
+    else:
+        lineID = int(line[idPos:], 16)
+
+    return lineID
+
+def getLastID(filename):
+    propFile = open(filename)
+    lines = propFile.readlines()
+    propFile.close()
+    lastID = -1
+    for line in lines:
+        line = line.strip()
+        if len(line) > 0 and line[0] != '#' and line[0] != '#' and line[0] != ' ':
+            lineID = getLineID(line)
+            if lineID > lastID:
+                lastID = lineID
+
+    return lastID
+
+guidArray = [("PS_MAPI",                "00020328-0000-0000-c000-000000000046"),
+             ("PS_PUBLIC_STRINGS",      "00020329-0000-0000-c000-000000000046"),
+             ("PS_INTERNET_HEADERS",    "00020386-0000-0000-c000-000000000046"),
+             ("PSETID_Appointment",     "00062002-0000-0000-c000-000000000046"),
+             ("PSETID_Task",            "00062003-0000-0000-c000-000000000046"),
+             ("PSETID_Address",         "00062004-0000-0000-c000-000000000046"),
+             ("PSETID_Common",          "00062008-0000-0000-c000-000000000046"),
+             ("PS_UNKNOWN_0006200b_0000_0000_c000_000000000046", "0006200b-0000-0000-c000-000000000046"),
+             ("PSETID_Remote",          "00062014-0000-0000-c000-000000000046"),
+             ("PSETID_Sharing",         "00062040-0000-0000-c000-000000000046"),
+             ("PSETID_PostRss",         "00062041-0000-0000-c000-000000000046"),
+             ("PSETID_Log",             "0006200a-0000-0000-c000-000000000046"),
+             ("PSETID_Note",            "0006200e-0000-0000-c000-000000000046"),
+             ("PSETID_Meeting",         "6ed8da90-450b-101b-98da-00aa003f1305"),
+             ("PSETID_Messaging",       "41f28f13-83f4-4114-a584-eedb5a6b0bff"),
+             ("PSETID_UnifiedMessaging", "4442858e-a9e3-4e80-b900-317a210cc15b"),
+             ("PSETID_AirSync",          "71035549-0739-4dcb-9163-00f0580dbbdf")]
+
+guidMapping = {}
+for guidTpl in guidArray:
+    guidMapping[guidTpl[1]] = guidTpl[0]
+
+def genNewLine(olID, nextID):
+    olIDArray = olID.split(":")
+
+    mappingKey = olIDArray[0].lower()
+    if guidMapping.has_key(mappingKey):
+        domain = guidMapping[mappingKey]
+    else:
+        domain = "PS_UNKNOWN_%s" % mappingKey.replace("-", "_")
+
+    olPropID = olIDArray[1]
+    if len(olPropID) == 4:
+        propKind = "MNID_ID"
+        propId = "0x%s" % olPropID.lower()
+        propName = "NULL"
+    else:
+        propKind = "MNID_STRING"
+        propId = "0x0000"
+        propName = olPropID
+    canonicalName = "PidLidUnknownProperty%s" % olPropID.lower()
+    OOM = "LID_UNKNOWN_PROPERTY_%s" % olPropID.lower()
+    propType = "PT_NULL"
+
+    return "%s\t%s\t%s\t%s\t%s\t%s\t%s\t0x%.4x" \
+        % (canonicalName, OOM, propId, propName, propType, propKind, domain, nextID)
+
+    # PidLidServerProcessed                                   ExchangeProcessed                    0x85CC NULL                   PT_BOOLEAN    MNID_ID     PSETID_Common
+    # PidNameCalendarAttendeeRole                             NULL                                 0x0000 CalendarAttendeeRole   PT_LONG       MNID_STRING PS_PUBLIC_STRINGS
+
+def main():
+    lastID = getLastID(filename)
+    # print "lastID: %.4x" % lastID
+    if lastID > -1:
+        nextID = lastID + 1
+        # newLines = []
+        if len(sys.argv) > 1:
+            print "### generated via append-prop.py"
+            for i in xrange(1, len(sys.argv)):
+                newLine = genNewLine(sys.argv[i], nextID)
+                print newLine
+                nextID = nextID + 1
+
+if __name__ == "__main__":
+    main()