WeChatMsg/wxManager/db_v4/contact.py
2025-03-28 21:43:32 +08:00

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