Browse Source

Add support for new avatar storage (#50)

* Add support for new avatar storage,modify the README and android-interact.sh

* Show the nickname for chatroom, fix the IOError in avatar.py

* style change
futurewrg 8 năm trước cách đây
mục cha
commit
20ae09848b

+ 1 - 1
android-interact.sh

@@ -53,7 +53,7 @@ elif [[ $1 == "db" || $1 == "res" ]]; then
 	if [[ $1 == "res" ]]; then
 		echo "Pulling resources... this might take a long time, because adb sucks..."
 		mkdir -p resource; cd resource
-		for d in image2 voice2 emoji video sfs; do
+		for d in avatar image2 voice2 emoji video sfs; do
 			mkdir -p $d; cd $d
 			adb pull "$RES_DIR/$chooseUser/$d"
 			cd ..

+ 21 - 6
wechat/avatar.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python2
 # -*- coding: UTF-8 -*-
 # File: avatar.py
-# Date: Thu Jun 18 00:02:07 2015 +0800
+# Date: Wed Nov 29 01:33:56 2017 -0800
 # Author: Yuxin Wu <[email protected]>
 
 from PIL import Image
@@ -14,19 +14,27 @@ logger = logging.getLogger(__name__)
 
 from common.textutil import ensure_bin_str, md5
 
+
 class AvatarReader(object):
     def __init__(self, avt_dir, avt_db="avatar.index"):
         self.avt_dir = avt_dir
 
+        # new location of avatar, see #50
+        self.avt_dir_new = avt_dir[:avt_dir.find('sfs')] + 'avatar'
         self.avt_db = avt_db
-        if self.avt_db is None or not os.path.isfile(self.avt_db):
+        self._use_avt = True
+        if self.avt_db is not None and os.path.isfile(self.avt_db):
+            self.ava_use_db = True
+        elif os.path.isdir(self.avt_dir_new):
+            self.ava_use_db = False
+        else:
             logger.warn(
                     "Avatar database {} not found. Will not use avatar!".format(avt_db))
-            self.avt_db = None
+            self._use_avt = False
 
     def get_avatar(self, username):
         """ username: `username` field in db.rcontact"""
-        if self.avt_db is None:
+        if not self._use_avt:
             return None
 
         username = ensure_bin_str(username)
@@ -37,8 +45,15 @@ class AvatarReader(object):
 
         try:
             try:
-                pos, size = self.query_index(filename)
-                return self.read_img(pos, size)
+                if self.avt_use_db:
+                    pos, size = self.query_index(filename)
+                    return self.read_img(pos, size)
+                else:
+                    img_file = os.path.join(self.avt_dir_new, filename)
+                    if os.path.exists(img_file):
+                        return Image.open(img_file)
+                    else:
+                        return None
             except TypeError:
                 logger.warn("Avatar for {} not found in avatar database.".format(username))
                 return None

+ 4 - 0
wechat/render.py

@@ -95,6 +95,10 @@ class HTMLRender(object):
         sender = u'you ' + msg.talker if not msg.isSend else 'me'
         format_dict = {'sender_label': sender,
                        'time': msg.createTime }
+        if(not msg.isSend and msg.is_chatroom()):
+            format_dict['nickname'] = '>\n       <pre align=\'left\'>'+msg.talker_nickname+'</pre'
+        else:
+            format_dict['nickname'] = ' '
         def fallback():
             template = TEMPLATES[TYPE_MSG]
             content = msg.msg_str()

+ 1 - 1
wechat/static/TP_EMOJI.html

@@ -2,7 +2,7 @@
   <div class="chatItemContent">
     <span class="avatar"></span>
     <div class="cloud cloudImg">
-      <div class="cloudPannel" title="{time}">
+      <div class="cloudPannel" title="{time}" {nickname}>
         <div class="cloudBody">
           <div class="cloudContent">
             <span class="img_wrap">

+ 1 - 1
wechat/static/TP_IMG.html

@@ -2,7 +2,7 @@
   <div class="chatItemContent">
     <span class="avatar"></span>
     <div class="cloud cloudImg">
-      <div class="cloudPannel" title="{time}">
+      <div class="cloudPannel" title="{time}" {nickname}>
         <div class="cloudBody">
           <div class="cloudContent">
             <span class="img_wrap">

+ 1 - 1
wechat/static/TP_MSG.html

@@ -2,7 +2,7 @@
   <div class="chatItemContent">
     <span class="avatar"></span>
     <div class="cloud cloudText">
-      <div class="cloudPannel" title="{time}">
+       <div class="cloudPannel" title="{time}" {nickname}>
         <div class="cloudBody">
           <div class="cloudContent">
             <pre style="white-space:pre-wrap">{content}</pre>

+ 1 - 1
wechat/static/TP_SPEAK.html

@@ -2,7 +2,7 @@
   <div class="chatItemContent">
     <span class="avatar"></span>
     <div class="cloud cloudVoice" onclick="playVoice(event)" style="width:80px">
-      <div class="cloudPannel" title="{time}">
+      <div class="cloudPannel" title="{time}" {nickname}>
         <div class="sendStatus">
           <span class="second">{voice_duration}"</span>
         </div>