Merge branch 'LC044:master' into master
This commit is contained in:
@@ -15,9 +15,20 @@ from .media_msg import MediaMsg
|
||||
from .misc import Misc
|
||||
from .msg import Msg
|
||||
from .msg import MsgType
|
||||
|
||||
misc_db = Misc()
|
||||
msg_db = Msg()
|
||||
micro_msg_db = MicroMsg()
|
||||
hard_link_db = HardLink()
|
||||
media_msg_db = MediaMsg()
|
||||
__all__ = ["data", 'output', 'misc_db', 'micro_msg_db', 'msg_db', 'hard_link_db','MsgType', "media_msg_db"]
|
||||
|
||||
|
||||
def close_db():
|
||||
misc_db.close()
|
||||
msg_db.close()
|
||||
micro_msg_db.close()
|
||||
hard_link_db.close()
|
||||
media_msg_db.close()
|
||||
|
||||
|
||||
__all__ = ['output', 'misc_db', 'micro_msg_db', 'msg_db', 'hard_link_db', 'MsgType', "media_msg_db"]
|
||||
|
||||
@@ -100,7 +100,17 @@ class MediaMsg:
|
||||
return transtext
|
||||
except:
|
||||
return ""
|
||||
def close(self):
|
||||
if self.open_flag:
|
||||
try:
|
||||
lock.acquire(True)
|
||||
self.open_flag = False
|
||||
self.DB.close()
|
||||
finally:
|
||||
lock.release()
|
||||
|
||||
def __del__(self):
|
||||
self.close()
|
||||
|
||||
if __name__ == '__main__':
|
||||
db_path = './Msg/MediaMSG.db'
|
||||
|
||||
@@ -3,8 +3,6 @@ import sqlite3
|
||||
import threading
|
||||
|
||||
lock = threading.Lock()
|
||||
DB = None
|
||||
cursor = None
|
||||
db_path = "./app/Database/Msg/MicroMsg.db"
|
||||
|
||||
|
||||
@@ -22,61 +20,6 @@ def singleton(cls):
|
||||
def is_database_exist():
|
||||
return os.path.exists(db_path)
|
||||
|
||||
lockMSG = threading.Lock()
|
||||
DBMSG = None
|
||||
cursorMSG = None
|
||||
db_msg_path = "./app/Database/Msg/MSG.db"
|
||||
|
||||
@singleton
|
||||
class MicroMSGMsg:
|
||||
def __init__(self):
|
||||
self.DBMSG = None
|
||||
self.cursorMSG = None
|
||||
self.open_flag = False
|
||||
self.init_database()
|
||||
|
||||
def init_database(self):
|
||||
if not self.open_flag:
|
||||
if os.path.exists(db_msg_path):
|
||||
self.DBMSG = sqlite3.connect(db_msg_path, check_same_thread=False)
|
||||
# '''创建游标'''
|
||||
self.cursorMSG = self.DBMSG.cursor()
|
||||
self.open_flag = True
|
||||
if lockMSG.locked():
|
||||
lockMSG.release()
|
||||
|
||||
def get_contact(self, contacts):
|
||||
if not self.open_flag:
|
||||
return None
|
||||
try:
|
||||
lockMSG.acquire(True)
|
||||
sql = '''select StrTalker, MAX(CreateTime) from MSG group by StrTalker'''
|
||||
self.cursorMSG.execute(sql)
|
||||
res = self.cursorMSG.fetchall()
|
||||
res = {StrTalker: CreateTime for StrTalker, CreateTime in res}
|
||||
contacts = [list(cur_contact) for cur_contact in contacts]
|
||||
for i, cur_contact in enumerate(contacts):
|
||||
if cur_contact[0] in res:
|
||||
contacts[i].append(res[cur_contact[0]])
|
||||
else:
|
||||
contacts[i].append(0)
|
||||
contacts.sort(key=lambda cur_contact: cur_contact[-1], reverse=True)
|
||||
finally:
|
||||
lockMSG.release()
|
||||
return contacts
|
||||
|
||||
def close(self):
|
||||
if self.open_flag:
|
||||
try:
|
||||
lockMSG.acquire(True)
|
||||
self.open_flag = False
|
||||
self.DBMSG.close()
|
||||
finally:
|
||||
lockMSG.release()
|
||||
|
||||
def __del__(self):
|
||||
self.close()
|
||||
|
||||
|
||||
@singleton
|
||||
class MicroMsg:
|
||||
@@ -116,7 +59,8 @@ class MicroMsg:
|
||||
result = self.cursor.fetchall()
|
||||
finally:
|
||||
lock.release()
|
||||
return MicroMSGMsg().get_contact(result)
|
||||
from app.DataBase import msg_db
|
||||
return msg_db.get_contact(result)
|
||||
|
||||
def get_contact_by_username(self, username):
|
||||
if not self.open_flag:
|
||||
|
||||
@@ -208,7 +208,25 @@ class Msg:
|
||||
))
|
||||
print(keyword,res)
|
||||
return res
|
||||
|
||||
def get_contact(self, contacts):
|
||||
if not self.open_flag:
|
||||
return None
|
||||
try:
|
||||
lock.acquire(True)
|
||||
sql = '''select StrTalker, MAX(CreateTime) from MSG group by StrTalker'''
|
||||
self.cursor.execute(sql)
|
||||
res = self.cursor.fetchall()
|
||||
finally:
|
||||
lock.release()
|
||||
res = {StrTalker: CreateTime for StrTalker, CreateTime in res}
|
||||
contacts = [list(cur_contact) for cur_contact in contacts]
|
||||
for i, cur_contact in enumerate(contacts):
|
||||
if cur_contact[0] in res:
|
||||
contacts[i].append(res[cur_contact[0]])
|
||||
else:
|
||||
contacts[i].append(0)
|
||||
contacts.sort(key=lambda cur_contact: cur_contact[-1], reverse=True)
|
||||
return contacts
|
||||
def get_messages_by_days(self, username_, is_Annual_report_=False, year_='2023'):
|
||||
if is_Annual_report_:
|
||||
sql = '''
|
||||
|
||||
@@ -383,17 +383,23 @@ class ChildThread(QThread):
|
||||
if video_path is None and image_path is not None:
|
||||
image_path = path.get_relative_path(image_path, base_path=f'/data/聊天记录/{self.contact.remark}/image')
|
||||
image_path = image_path
|
||||
os.utime(origin_docx_path + image_path[1:], (timestamp, timestamp))
|
||||
print(origin_docx_path + image_path[1:])
|
||||
image_path = image_path.replace('\\', '/')
|
||||
# print(f"tohtml:---{image_path}")
|
||||
if self.is_5_min(timestamp):
|
||||
try:
|
||||
# todo 网络图片问题
|
||||
print(origin_docx_path + image_path[1:])
|
||||
os.utime(origin_docx_path + image_path[1:], (timestamp, timestamp))
|
||||
image_path = image_path.replace('\\', '/')
|
||||
# print(f"tohtml:---{image_path}")
|
||||
if self.is_5_min(timestamp):
|
||||
doc.write(
|
||||
f'''{{ type:0, text: '{str_time}',is_send:0,avatar_path:''}},'''
|
||||
)
|
||||
doc.write(
|
||||
f'''{{ type:0, text: '{str_time}',is_send:0,avatar_path:''}},'''
|
||||
f'''{{ type:3, text: '{image_path}',is_send:{is_send},avatar_path:'{avatar}'}},'''
|
||||
)
|
||||
except:
|
||||
doc.write(
|
||||
f'''{{ type:1, text: '视频丢失',is_send:{is_send},avatar_path:'{avatar}'}},'''
|
||||
)
|
||||
doc.write(
|
||||
f'''{{ type:3, text: '{image_path}',is_send:{is_send},avatar_path:'{avatar}'}},'''
|
||||
)
|
||||
return
|
||||
if video_path is None and image_path is None:
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user