mirror of
https://github.com/LC044/WeChatMsg
synced 2025-04-17 00:48:23 +08:00
153 lines
4.6 KiB
Python
153 lines
4.6 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
@Time : 2024/12/5 22:47
|
|
@Author : SiYuan
|
|
@Email : 863909694@qq.com
|
|
@File : MemoTrace-contact.py
|
|
@Description :
|
|
"""
|
|
import os
|
|
import traceback
|
|
|
|
from wxManager.merge import increase_update_data, increase_data
|
|
from wxManager.model.db_model import DataBaseBase
|
|
|
|
|
|
class ContactDB(DataBaseBase):
|
|
def create_index(self):
|
|
sql = "CREATE INDEX IF NOT EXISTS contact_username ON contact(username);"
|
|
try:
|
|
cursor = self.DB.cursor()
|
|
cursor.execute(sql)
|
|
self.commit()
|
|
cursor.close()
|
|
return True
|
|
except:
|
|
return False
|
|
|
|
def get_label_by_id(self, label_id) -> str:
|
|
sql = '''
|
|
select label_name_ from contact_label
|
|
where label_id_ = ?
|
|
'''
|
|
try:
|
|
cursor = self.DB.cursor()
|
|
cursor.execute(sql, [label_id])
|
|
result = cursor.fetchone()
|
|
if result:
|
|
return result[0]
|
|
else:
|
|
return ''
|
|
except:
|
|
return ''
|
|
|
|
def get_labels(self, label_id_list) -> str:
|
|
if not label_id_list:
|
|
return ''
|
|
return ','.join(map(self.get_label_by_id, label_id_list.strip(',').split(',')))
|
|
|
|
def get_contacts(self):
|
|
if not self.open_flag:
|
|
return []
|
|
self.create_index()
|
|
'''
|
|
@return:
|
|
a[0]:username
|
|
a[1]:alias
|
|
a[2]:local_type
|
|
a[3]:flag
|
|
a[4]:remark
|
|
a[5]:nick_name
|
|
a[6]:pin_yin_initial
|
|
a[7]:remark_pin_yin_initial
|
|
a[8]:small_head_url
|
|
a[9]:big_head_url
|
|
a[10]:extra_buffer
|
|
a[11]:head_img_md5
|
|
a[12]:
|
|
a[13]:
|
|
a[14]:
|
|
'''
|
|
sql = '''
|
|
SELECT username, alias, local_type, flag, remark, nick_name, pin_yin_initial, remark_pin_yin_initial, small_head_url, big_head_url,extra_buffer,head_img_md5,chat_room_notify,is_in_chat_room,description,chat_room_type
|
|
FROM contact
|
|
WHERE (local_type=1 or local_type=2 or local_type=5)
|
|
ORDER BY
|
|
CASE
|
|
WHEN remark_quan_pin = '' THEN quan_pin
|
|
ELSE remark_quan_pin
|
|
END ASC
|
|
'''
|
|
self.cursor.execute(sql)
|
|
results = self.cursor.fetchall()
|
|
self.DB.commit()
|
|
return results
|
|
|
|
def get_contact_by_username(self, username):
|
|
sql = '''
|
|
SELECT username, alias, local_type,flag, remark, nick_name, pin_yin_initial, remark_pin_yin_initial, small_head_url, big_head_url,extra_buffer,head_img_md5,chat_room_notify,is_in_chat_room,description,chat_room_type
|
|
FROM contact
|
|
WHERE username=?
|
|
'''
|
|
cursor = self.DB.cursor()
|
|
cursor.execute(sql, [username])
|
|
result = cursor.fetchone()
|
|
cursor.close()
|
|
# self.commit()
|
|
if result:
|
|
return result
|
|
return None
|
|
|
|
def get_chatroom_info(self, username):
|
|
sql = '''
|
|
select id,ext_buffer,username,owner
|
|
from chat_room
|
|
where username=?
|
|
'''
|
|
cursor = self.DB.cursor()
|
|
cursor.execute(sql, [username])
|
|
result = cursor.fetchone()
|
|
cursor.close()
|
|
if result:
|
|
return result
|
|
return None
|
|
|
|
def set_remark(self, username, remark):
|
|
if not remark:
|
|
return False
|
|
sql = '''
|
|
update contact
|
|
set remark=?
|
|
where username=?
|
|
'''
|
|
cursor = self.DB.cursor()
|
|
cursor.execute(sql, [remark, username])
|
|
cursor.close()
|
|
self.commit()
|
|
return True
|
|
|
|
def merge(self, db_path):
|
|
if not (os.path.exists(db_path) or os.path.isfile(db_path)):
|
|
print(f'{db_path} 不存在')
|
|
return
|
|
try:
|
|
# 获取列名
|
|
increase_update_data(db_path, self.cursor, self.DB, 'biz_info', 'username')
|
|
increase_update_data(db_path, self.cursor, self.DB, 'chat_room', 'username')
|
|
increase_update_data(db_path, self.cursor, self.DB, 'chat_room_info_detail', 'room_id_')
|
|
increase_update_data(db_path, self.cursor, self.DB, 'contact', 'username')
|
|
increase_update_data(db_path, self.cursor, self.DB, 'contact_label', 'label_id_')
|
|
increase_update_data(db_path, self.cursor, self.DB, 'openim_acct_type', 'lang_id')
|
|
increase_update_data(db_path, self.cursor, self.DB, 'openim_appid', 'lang_id')
|
|
# increase_update_data(db_path, self.cursor, self.DB, 'chat_room_member', 'room_id_')
|
|
increase_data(db_path, self.cursor, self.DB, 'name2id', 'username')
|
|
except:
|
|
print(f"数据库操作错误: {traceback.format_exc()}")
|
|
self.DB.rollback()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
pass
|