#!/usr/bin/env python3
# 使用系统默认的 python3 运行
###########################################################################################
# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本:1.8.0
# 更新时间:2022年08月01日
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 构建
###########################################################################################
#################
# 引入所需的库
#################
import os
import sys
import json
import pyquery
import req as requests
import urllib.parse as parse

def CleanTerminal():
    os.system("clear")
    print('''                                                        
   mm                  mmmm    m                        
   ##   mmmm   mmmm   #"   " mm#mm   mmm    m mm   mmm  
  #  #  #" "#  #" "#  "#mmm    #    #" "#   #"  " #"  # 
  #mm#  #   #  #   #      "#   #    #   #   #     #"""" 
 #    # ##m#"  ##m#"  "mmm#"   "mm  "#m#"   #     "#mm" 
        #      #                                        
        "      "                                        
''')
    print("本软件源来自腾讯软件管家,只会下载文件后缀为“.exe”的文件")
    print("请输入要搜索的内容,如果要结束,请输入“exit”或点击右上角“×”关闭")
    print("无法保证从这里下载的安装包能正常安装/运行")

if __name__ == "__main__":
    if "--help" in sys.argv:
        print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢")
        print("版本:1.0.0")
        print("本程序可以更方便的在 wine 容器中安装指定应用")
        sys.exit()
    if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "":
        print("您未指定需要安装的容器和使用的 wine,无法继续")
        print("参数:")
        print("XXX 参数一 参数二")
        print("参数一为需要安装的容器,参数二为需要使用的wine,两个参数位置不能颠倒")
        sys.exit()

    CleanTerminal()
    while True:
        search = input(">")
        if search.replace(" ", "").replace("\n", "") == "":
            continue
        if search.lower() == "exit":  # 输入“exit”
            break  # 结束程序

        # 获取初步 API
        try:
            apiReturn = json.loads(requests.get(f"https://s.pcmgr.qq.com/tapi/web/searchcgi.php?type=search&callback=searchCallback&keyword={parse.quote(search)}&page=1&pernum=30").text[:-2][15:])
        except:
            #traceback.print_exc()
            input("无法连接服务器,按回车键继续")
            CleanTerminal()
            continue
        option = 0
        downloadUrl = []
        if not "list" in apiReturn:
            print("没有搜到结果,尝试换一个关键词试试")
            input("按回车键继续")
            CleanTerminal()
            continue
        for i in apiReturn["list"]:  # 遍历选项
            htmlShow = i["xmlInfo"]
            url = pyquery.PyQuery(htmlShow)("url").text()
            if url[-3:] != "exe":  # 格式非 exe,忽略
                continue
            print(option, i["SoftName"], url)
            downloadUrl.append(url)
            option += 1

        if option == 0:
            print("没有搜到结果,尝试换一个关键词试试")
            input("按回车键继续")
            CleanTerminal()
            continue
        while True:
            try:
                choose = input("请输入选项编号(输入“exit”取消) >")
                if choose.lower() == "exit":
                    choose = choose.lower()
                    break
                choose = int(choose)
            except:
                print("输入有误,请正确输入编号")
                continue
            if not 0 <= choose or not choose < len(downloadUrl):
                print("输入的值超出范围,请正确输入编号")
                continue
            break
        if choose == "exit":
            CleanTerminal()
            continue
        print("开始下载……")
        os.system("rm -rf /tmp/wineappstore")
        os.system("mkdir -p /tmp/wineappstore")
        os.system(f"aria2c -x 16 -s 16 -d /tmp/wineappstore -o install.exe \"{downloadUrl[choose]}\"")
        print("开始安装……")
        print(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} /tmp/wineappstore/install.exe")
        os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} /tmp/wineappstore/install.exe")
        print("安装结束……")
        input("按回车键继续……")
        CleanTerminal()