Forráskód Böngészése

support both chatid and nickname (fix #51)

Yuxin Wu 5 éve
szülő
commit
973993723b
4 módosított fájl, 21 hozzáadás és 7 törlés
  1. 1 1
      dump-audio.py
  2. 3 2
      dump-html.py
  3. 15 2
      wechat/parser.py
  4. 2 2
      wechat/res.py

+ 1 - 1
dump-audio.py

@@ -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
dump-html.py

@@ -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
wechat/parser.py

@@ -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
wechat/res.py

@@ -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(