import sys import re import os from os.path import dirname, abspath from os.path import join as joinpath # the following const are generated from deltachat.h # this works well when you in a git-checkout # run "python deltachat/const.py" to regenerate events # begin const generated DC_GCL_ARCHIVED_ONLY = 0x01 DC_GCL_NO_SPECIALS = 0x02 DC_GCL_ADD_ALLDONE_HINT = 0x04 DC_GCL_VERIFIED_ONLY = 0x01 DC_GCL_ADD_SELF = 0x02 DC_QR_ASK_VERIFYCONTACT = 200 DC_QR_ASK_VERIFYGROUP = 202 DC_QR_FPR_OK = 210 DC_QR_FPR_MISMATCH = 220 DC_QR_FPR_WITHOUT_ADDR = 230 DC_QR_ADDR = 320 DC_QR_TEXT = 330 DC_QR_URL = 332 DC_QR_ERROR = 400 DC_CHAT_ID_DEADDROP = 1 DC_CHAT_ID_TRASH = 3 DC_CHAT_ID_MSGS_IN_CREATION = 4 DC_CHAT_ID_STARRED = 5 DC_CHAT_ID_ARCHIVED_LINK = 6 DC_CHAT_ID_ALLDONE_HINT = 7 DC_CHAT_ID_LAST_SPECIAL = 9 DC_CHAT_TYPE_UNDEFINED = 0 DC_CHAT_TYPE_SINGLE = 100 DC_CHAT_TYPE_GROUP = 120 DC_CHAT_TYPE_VERIFIED_GROUP = 130 DC_MSG_ID_MARKER1 = 1 DC_MSG_ID_DAYMARKER = 9 DC_MSG_ID_LAST_SPECIAL = 9 DC_STATE_UNDEFINED = 0 DC_STATE_IN_FRESH = 10 DC_STATE_IN_NOTICED = 13 DC_STATE_IN_SEEN = 16 DC_STATE_OUT_PREPARING = 18 DC_STATE_OUT_DRAFT = 19 DC_STATE_OUT_PENDING = 20 DC_STATE_OUT_FAILED = 24 DC_STATE_OUT_DELIVERED = 26 DC_STATE_OUT_MDN_RCVD = 28 DC_CONTACT_ID_SELF = 1 DC_CONTACT_ID_DEVICE = 2 DC_CONTACT_ID_LAST_SPECIAL = 9 DC_MSG_TEXT = 10 DC_MSG_IMAGE = 20 DC_MSG_GIF = 21 DC_MSG_STICKER = 23 DC_MSG_AUDIO = 40 DC_MSG_VOICE = 41 DC_MSG_VIDEO = 50 DC_MSG_FILE = 60 DC_EVENT_INFO = 100 DC_EVENT_SMTP_CONNECTED = 101 DC_EVENT_IMAP_CONNECTED = 102 DC_EVENT_SMTP_MESSAGE_SENT = 103 DC_EVENT_IMAP_MESSAGE_DELETED = 104 DC_EVENT_IMAP_MESSAGE_MOVED = 105 DC_EVENT_NEW_BLOB_FILE = 150 DC_EVENT_WARNING = 300 DC_EVENT_ERROR = 400 DC_EVENT_ERROR_NETWORK = 401 DC_EVENT_ERROR_SELF_NOT_IN_GROUP = 410 DC_EVENT_MSGS_CHANGED = 2000 DC_EVENT_INCOMING_MSG = 2005 DC_EVENT_MSG_DELIVERED = 2010 DC_EVENT_MSG_FAILED = 2012 DC_EVENT_MSG_READ = 2015 DC_EVENT_CHAT_MODIFIED = 2020 DC_EVENT_CONTACTS_CHANGED = 2030 DC_EVENT_LOCATION_CHANGED = 2035 DC_EVENT_CONFIGURE_PROGRESS = 2041 DC_EVENT_IMEX_PROGRESS = 2051 DC_EVENT_IMEX_FILE_WRITTEN = 2052 DC_EVENT_SECUREJOIN_INVITER_PROGRESS = 2060 DC_EVENT_SECUREJOIN_JOINER_PROGRESS = 2061 DC_EVENT_GET_STRING = 2091 DC_EVENT_FILE_COPIED = 2055 DC_EVENT_IS_OFFLINE = 2081 DC_PROVIDER_STATUS_OK = 1 DC_PROVIDER_STATUS_PREPARATION = 2 DC_PROVIDER_STATUS_BROKEN = 3 # end const generated def read_event_defines(f): rex = re.compile(r'#define\s+((?:DC_EVENT_|DC_QR|DC_MSG|DC_STATE_|' r'DC_CONTACT_ID_|DC_GCL|DC_CHAT|DC_PROVIDER)\S+)\s+([x\d]+).*') for line in f: m = rex.match(line) if m: yield m.groups() if __name__ == "__main__": here = abspath(__file__).rstrip("oc") here_dir = dirname(here) if len(sys.argv) >= 2: deltah = sys.argv[1] else: deltah = joinpath(dirname(dirname(dirname(here_dir))), "deltachat-ffi", "deltachat.h") assert os.path.exists(deltah) lines = [] skip_to_end = False for orig_line in open(here): if skip_to_end: if not orig_line.startswith("# end const"): continue skip_to_end = False lines.append(orig_line) if orig_line.startswith("# begin const"): with open(deltah) as f: for name, item in read_event_defines(f): lines.append("{} = {}\n".format(name, item)) skip_to_end = True tmpname = here + ".tmp" with open(tmpname, "w") as f: f.write("".join(lines)) os.rename(tmpname, here)