support both chatid and nickname (fix #51)

This commit is contained in:
Yuxin Wu
2020-06-27 20:04:34 -07:00
parent 55784bd1bf
commit 973993723b
4 changed files with 21 additions and 7 deletions
+1 -1
View File
@@ -24,7 +24,7 @@ if __name__ == '__main__':
res = Resource(parser, args.res, '')
try:
chatid = parser.get_id_by_nickname(args.name)
chatid = parser.get_chat_id(args.name)
except KeyError:
sys.stderr.write(u"Valid Contacts: {}\n".format('\n'.join(parser.all_chat_nicknames)))
sys.stderr.write(u"Couldn't find the chat {}.".format(args.name));
+3 -2
View File
@@ -31,15 +31,16 @@ if __name__ == '__main__':
parser = WeChatDBParser(args.db)
try:
chatid = parser.get_id_by_nickname(name)
chatid = parser.get_chat_id(args.name)
except KeyError:
sys.stderr.write(u"Valid Contacts: {}\n".format(
u'\n'.join(parser.all_chat_nicknames)))
sys.stderr.write(u"Couldn't find the chat {}.".format(name));
sys.exit(1)
res = Resource(parser, args.res, args.avt)
msgs = parser.msgs_by_chat[chatid]
logger.info(f"Number of Messages: {len(msgs)}")
logger.info(f"Number of Messages for chatid {chatid}: {len(msgs)}")
assert len(msgs) > 0
render = HTMLRender(parser, res)
+15 -2
View File
@@ -136,7 +136,7 @@ SELECT {} FROM message
if values['content']:
values['content'] = ensure_unicode(values['content'])
else:
values['content'] = u''
values['content'] = ''
values['createTime'] = datetime.fromtimestamp(values['createTime']/ 1000)
values['chat'] = values['talker']
try:
@@ -147,7 +147,7 @@ SELECT {} FROM message
if values['isSend'] == 1:
values['talker'] = self.username
elif values['type'] == TYPE_SYSTEM:
values['talker'] = u'SYSTEM'
values['talker'] = 'SYSTEM'
else:
talker = content[:content.find(':')]
values['talker'] = talker
@@ -175,9 +175,22 @@ SELECT {} FROM message
return [self.contacts[k] for k in self.all_chat_ids if len(self.contacts[k])]
def get_id_by_nickname(self, nickname):
"""
Get chat id by nickname.
"""
l = self.contacts_rev[nickname]
if len(l) == 0:
raise KeyError("No contacts have nickname {}".format(nickname))
if len(l) > 1:
logger.warn("More than one contacts have nickname {}! Using the first contact".format(nickname))
return l[0]
def get_chat_id(self, nick_name_or_id):
"""
Get the unique chat id by either chat id itself, or the nickname of the chat.
"""
if nick_name_or_id in self.contacts:
return nick_name_or_id
else:
return self.get_id_by_nickname(nick_name_or_id)
+2 -2
View File
@@ -72,8 +72,8 @@ class Resource(object):
""" multimedia resources in chat"""
def __init__(self, parser, res_dir, avt_db):
def check(subdir):
assert os.path.isdir(os.path.join(res_dir, subdir)), \
"No such directory: {}".format(subdir)
dir_to_check = os.path.join(res_dir, subdir)
assert os.path.isdir(dir_to_check), f"No such directory: {dir_to_check}"
[check(k) for k in ['', IMG_DIRNAME, EMOJI_DIRNAME, VOICE_DIRNAME]]
self.emoji_cache = EmojiCache(