WeChatMsg/app/ui/tool/setting/setting.py
2024-02-29 16:36:32 +08:00

209 lines
6.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import json
import os.path
import time
import requests
from PyQt5.QtCore import pyqtSignal, QThread
from PyQt5.QtWidgets import QWidget, QMessageBox
from app.config import SEND_LOG_FLAG
from app.person import Me
from .settingUi import Ui_Form
Stylesheet = """
QPushButton{
background-color: rgb(250,252,253);
border-radius: 5px;
padding: 8px;
border-right: 2px solid #888888; /* 按钮边框2px宽白色 */
border-bottom: 2px solid #888888; /* 按钮边框2px宽白色 */
border-left: 1px solid #ffffff; /* 按钮边框2px宽白色 */
border-top: 1px solid #ffffff; /* 按钮边框2px宽白色 */
}
QPushButton:hover {
background-color: lightgray;
}
/*去掉item虚线边框*/
QListWidget, QListView, QTreeWidget, QTreeView {
outline: 0px;
border:none;
}
/*设置左侧选项的最小最大宽度,文字颜色和背景颜色*/
QListWidget {
min-width: 400px;
max-width: 400px;
min-height: 80px;
max-height: 80px;
color: black;
border:none;
}
QListWidget::item{
min-width: 80px;
max-width: 400px;
min-height: 80px;
max-height: 80px;
}
/*被选中时的背景颜色和左边框颜色*/
QListWidget::item:selected {
border-left:none;
color: black;
font-weight: bold;
}
QCheckBox::indicator {
background: rgb(251, 251, 251);
Width:60px;
Height:60px;
border-radius: 10px;
}
QCheckBox::indicator:unchecked{
Width:60px;
Height:60px;
image: url(:/icons/icons/按钮_关闭.svg);
}
QCheckBox::indicator:checked{
Width:60px;
Height:60px;
image: url(:/icons/icons/按钮_开启.svg);
}
"""
def set_SEND_LOG_FLAG(flag):
# noinspection PyGlobalUndefined
global SEND_LOG_FLAG
SEND_LOG_FLAG = flag
class SettingControl(QWidget, Ui_Form):
def __init__(self, parent=None):
super(SettingControl, self).__init__(parent)
self.setStyleSheet(Stylesheet)
self.setupUi(self)
self.btn_addstopword.clicked.connect(self.add_stopwords)
self.btn_addnewword_2.clicked.connect(self.add_new_words)
self.commandLinkButton_send_error_log.clicked.connect(self.show_info)
self.btn_send_error_log.clicked.connect(self.send_error_log)
self.init_ui()
self.read_data()
def init_ui(self):
self.checkBox.setText('')
self.checkBox_send_error_log.clicked.connect(self.set_error_log)
def show_info(self):
QMessageBox.information(self, "收集错误信息",
"为了更好的解决用户问题,需要收集软件崩溃导致的错误信息,该操作不会上传包括手机号、微信号、昵称等在内的任何信息\n"
)
def set_error_log(self):
if self.checkBox_send_error_log.isChecked():
self.label_error_log.setText('')
set_SEND_LOG_FLAG(True)
else:
self.label_error_log.setText('')
set_SEND_LOG_FLAG(False)
print('SEND_LOG_FLAG:', SEND_LOG_FLAG)
def read_data(self):
os.makedirs('./app/data', exist_ok=True)
stopwords = ['裂开', '苦涩', '叹气', '凋谢', '让我看看', '', '奋斗', '疑问', '擦汗', '抠鼻', '鄙视', '勾引',
'奸笑', '嘿哈', '捂脸', '机智', '加油', '吃瓜', '尴尬', '炸弹', '旺柴']
new_words = ['YYDS', '666', '显眼包', '遥遥领先']
if os.path.exists('./app/data/stopwords.txt'):
with open('./app/data/stopwords.txt', 'r', encoding='utf-8') as f:
stopwords = set(f.read().splitlines())
self.plainTextEdit.setPlainText(' '.join(stopwords))
else:
self.plainTextEdit.setPlainText(' '.join(stopwords))
stopwords = '\n'.join(stopwords)
with open('./app/data/stopwords.txt', 'w', encoding='utf-8') as f:
f.write(stopwords)
if os.path.exists('./app/data/new_words.txt'):
with open('./app/data/new_words.txt', 'r', encoding='utf-8') as f:
new_words = set(f.read().splitlines())
self.plainTextEdit_newword.setPlainText(' '.join(new_words))
else:
self.plainTextEdit_newword.setPlainText(' '.join(new_words))
stopwords = '\n'.join(new_words)
with open('./app/data/new_words.txt', 'w', encoding='utf-8') as f:
f.write(stopwords)
def add_stopwords(self):
text = self.plainTextEdit.toPlainText()
stopwords = '\n'.join(text.split())
with open('./app/data/stopwords.txt', 'w', encoding='utf-8') as f:
f.write(stopwords)
QMessageBox.about(self, "添加成功", "停用词添加成功")
def add_new_words(self):
text = self.plainTextEdit_newword.toPlainText()
new_words = '\n'.join(text.split())
with open('./app/data/new_words.txt', 'w', encoding='utf-8') as f:
f.write(new_words)
QMessageBox.about(self, "添加成功", "自定义词添加成功")
def send_error_log(self):
self.send_thread = MyThread()
self.send_thread.signal.connect(self.show_resp)
self.send_thread.start()
def show_resp(self, message):
if message.get('code') == 200:
QMessageBox.about(self, "发送结果", f"日志发送成功\n{message.get('message')}")
else:
QMessageBox.about(self, "发送结果", f"{message.get('code')}:{message.get('errmsg')}")
class MyThread(QThread):
signal = pyqtSignal(dict)
def __init__(self, message=''):
super(MyThread, self).__init__()
if message:
self.message = message
else:
filename = time.strftime("%Y-%m-%d", time.localtime(time.time()))
file_path = f'{filename}-log.log'
if os.path.exists(file_path):
with open(file_path, 'r', encoding='gbk') as f:
self.message = f.read()
elif os.path.exists(f'./app/log/logs/{filename}-log.log'):
with open(f'./app/log/logs/{filename}-log.log', 'r', encoding='gbk') as f:
self.message = f.read()
def __del__(self):
pass
def send_error_msg(self, message):
url = "http://api.lc044.love/error"
if not message:
return {
'code': 201,
'errmsg': '日志为空'
}
data = {
'username': Me().wxid,
'error': message
}
try:
response = requests.post(url, json=data)
if response.status_code == 200:
resp_info = response.json()
return resp_info
else:
return {
'code': 503,
'errmsg': '服务器错误'
}
except:
return {
'code': 404,
'errmsg': '客户端错误'
}
def run(self):
resp_info = self.send_error_msg(self.message)
self.signal.emit(resp_info)