2022-01-27 21:21:25 +08:00
|
|
|
|
# -*- coding: UTF-8 -*-
|
|
|
|
|
"""提供错误报告的基本操作及方法 顺便提供版本更新、安装库等功能"""
|
|
|
|
|
|
|
|
|
|
# 诸葛亮与八卦阵帮忙修改语法 日期:---2022年1月19日
|
|
|
|
|
# 统计:致命(三级)错误:0个;警告(二级)错误:1个;语法(一级)错误:72个
|
|
|
|
|
import os
|
|
|
|
|
import zipfile
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def makeZip(sourceDir, outFilename, compression=8, exceptFile=None):
|
|
|
|
|
"""使用compression指定的算法打包目录为zip文件\n
|
|
|
|
|
默认算法为DEFLATED(8),可用算法如下:\n
|
|
|
|
|
STORED = 0\n
|
|
|
|
|
DEFLATED = 8\n
|
|
|
|
|
BZIP2 = 12\n
|
|
|
|
|
LZMA = 14\n
|
|
|
|
|
"""
|
|
|
|
|
zipf = zipfile.ZipFile(outFilename, 'w', compression)
|
|
|
|
|
pre_len = len(os.path.dirname(sourceDir))
|
|
|
|
|
for parent, dirnames, filenames in os.walk(sourceDir):
|
|
|
|
|
for filename in filenames:
|
|
|
|
|
if filename == exceptFile:
|
|
|
|
|
continue
|
|
|
|
|
print(filename)
|
|
|
|
|
pathfile = os.path.join(parent, filename)
|
|
|
|
|
arcname = pathfile[pre_len:].strip(os.path.sep) # 相对路径
|
|
|
|
|
zipf.write(pathfile, arcname)
|
|
|
|
|
|
|
|
|
|
zipf.close()
|
|
|
|
|
del zipf, pre_len
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 以上函数节选并修改自 正在攀登的小蜗牛 的博客:https://blog.csdn.net/qq_21127151/article/details/107503942
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class report:
|
|
|
|
|
"""发送报告以及相应的任务处理"""
|
|
|
|
|
|
|
|
|
|
def __init__(self, senderName: str = 'Unknown', senderContact: str = 'None', describetion: str = ''):
|
|
|
|
|
""":param senderName 发送者名称
|
|
|
|
|
:param senderContact 发送者联系方式
|
|
|
|
|
:param describetion 问题描述"""
|
|
|
|
|
self.senderName = senderName
|
|
|
|
|
self.senderContact = senderContact
|
|
|
|
|
self.describetion = describetion
|
|
|
|
|
if not self.senderName:
|
|
|
|
|
self.senderName = 'Unknown'
|
|
|
|
|
if not self.senderContact:
|
|
|
|
|
self.senderContact = 'None'
|
|
|
|
|
|
|
|
|
|
def emailReport(self):
|
|
|
|
|
"""使用E-mail方法发送当前的日志和临时文件等"""
|
|
|
|
|
import smtplib
|
|
|
|
|
from email.mime.text import MIMEText
|
|
|
|
|
from email.mime.multipart import MIMEMultipart
|
|
|
|
|
from email.header import Header
|
|
|
|
|
from nmcsup.log import log
|
|
|
|
|
log("发送错误报告")
|
|
|
|
|
import os
|
|
|
|
|
log("添加标题与正文")
|
|
|
|
|
msg = MIMEMultipart()
|
|
|
|
|
# 发送者与接收者显示名称
|
|
|
|
|
msg["From"] = Header(self.senderName, 'utf-8')
|
|
|
|
|
msg["To"] = Header("W-YI (QQ2647547478)", 'utf-8')
|
|
|
|
|
# 标题
|
|
|
|
|
msg["Subject"] = '音·创 - 来自 ' + self.senderName + ' 的错误报告'
|
|
|
|
|
# 正文
|
|
|
|
|
msg.attach(
|
|
|
|
|
MIMEText("来自" + self.senderName + "( " + self.senderContact + " )的错误描述:\n" + self.describetion,
|
|
|
|
|
'utf-8'))
|
|
|
|
|
log("添加完毕,正在生成压缩包...")
|
|
|
|
|
makeZip("./", "Temps&Logs.zip", exceptFile="Temps&Logs.zip")
|
|
|
|
|
attafile = MIMEText(str(open("Temps&Logs.zip", 'rb').read()), "base64", 'gb2312')
|
|
|
|
|
attafile["Content-Type"] = 'application/octet-stream'
|
|
|
|
|
attafile["Content-Disposition"] = 'attachmentfilename="BugReport_from_' + self.senderName + '.zip"'
|
|
|
|
|
msg.attach(attafile)
|
|
|
|
|
log("完毕,准备发送")
|
|
|
|
|
try:
|
|
|
|
|
smtp = smtplib.SMTP()
|
|
|
|
|
smtp.connect("smtp.163.com")
|
|
|
|
|
# smtp.login("RyounDevTeam@163.com","RyounDaiYi99")
|
|
|
|
|
# SIQQKQQYCZRVIDFJ是授权密码
|
|
|
|
|
smtp.login("RyounDevTeam@163.com", "SIQQKQQYCZRVIDFJ")
|
|
|
|
|
smtp.sendmail("RyounDevTeam@163.com", ["RyounDevTeam@163.com", ], msg.as_string())
|
|
|
|
|
log("错误汇报邮件已发送")
|
|
|
|
|
except smtplib.SMTPException as e:
|
|
|
|
|
log("错误汇报邮件发送失败:\n" + str(e))
|
|
|
|
|
log("清空内存和临时文件")
|
|
|
|
|
del msg, attafile
|
|
|
|
|
os.remove("./Temps&Logs.zip")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class version:
|
|
|
|
|
libraries = (
|
|
|
|
|
'mido', 'amulet', 'amulet-core', 'amulet-nbt', 'piano_transcription_inference', 'pypinyin',
|
2022-03-13 22:29:57 +08:00
|
|
|
|
'pyinstaller','py7zr','websockets', 'torch','requests'
|
2022-01-27 21:21:25 +08:00
|
|
|
|
)
|
|
|
|
|
"""当前所需库,有一些是开发用的,用户不需要安装"""
|
|
|
|
|
|
2022-03-06 23:40:31 +08:00
|
|
|
|
version = ('0.2.0', 'Delta',)
|
2022-01-27 21:21:25 +08:00
|
|
|
|
"""当前版本"""
|
|
|
|
|
|
|
|
|
|
def __init__(self) -> None:
|
|
|
|
|
|
|
|
|
|
self.libraries = version.libraries
|
|
|
|
|
"""当前所需库,有一些是开发用的,用户不需要安装"""
|
|
|
|
|
|
|
|
|
|
self.version = version.version
|
|
|
|
|
"""当前版本"""
|
2022-01-31 23:01:11 +08:00
|
|
|
|
|
2022-01-27 21:21:25 +08:00
|
|
|
|
|
2022-01-31 23:01:11 +08:00
|
|
|
|
def installLibraries(self,index:str = 'https://pypi.tuna.tsinghua.edu.cn/simple'):
|
2022-01-27 21:21:25 +08:00
|
|
|
|
"""安装全部开发用库"""
|
|
|
|
|
from sys import platform
|
|
|
|
|
import os
|
|
|
|
|
if platform == 'win32':
|
|
|
|
|
import shutil
|
|
|
|
|
try:
|
|
|
|
|
shutil.rmtree(os.getenv('APPDATA') + '\\Musicreater\\')
|
2022-01-31 23:01:11 +08:00
|
|
|
|
except FileNotFoundError:
|
2022-01-27 21:21:25 +08:00
|
|
|
|
pass
|
|
|
|
|
for i in self.libraries:
|
|
|
|
|
print("安装库:" + i)
|
2022-01-31 23:01:11 +08:00
|
|
|
|
os.system(f"python -m pip install {i} -i {index}")
|
2022-01-27 21:21:25 +08:00
|
|
|
|
elif platform == 'linux':
|
|
|
|
|
os.system("sudo apt-get install python3-pip")
|
|
|
|
|
os.system("sudo apt-get install python3-tk")
|
|
|
|
|
os.system("sudo apt-get install python3-tkinter")
|
|
|
|
|
for i in self.libraries:
|
|
|
|
|
print("安装库:" + i)
|
2022-01-31 23:01:11 +08:00
|
|
|
|
os.system(f"sudo python3 -m pip install {i} -i {index}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __call__(self):
|
|
|
|
|
'''直接安装库,顺便返回一下当前版本'''
|
|
|
|
|
self.installLibraries()
|
|
|
|
|
return self.version
|