Package editing
This commit is contained in:
46
horsygui.py
46
horsygui.py
@@ -1,7 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
import subprocess
|
|
||||||
import sys
|
import sys
|
||||||
import math
|
import math
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
import webbrowser
|
import webbrowser
|
||||||
import modules.vars as horsy_vars
|
import modules.vars as horsy_vars
|
||||||
from PyQt5 import QtWidgets
|
from PyQt5 import QtWidgets
|
||||||
@@ -29,6 +30,10 @@ UiDownloadWindow = QtWidgets.QMainWindow()
|
|||||||
download_ui = gui.Ui_DownloadWindow()
|
download_ui = gui.Ui_DownloadWindow()
|
||||||
download_ui.setupUi(UiDownloadWindow)
|
download_ui.setupUi(UiDownloadWindow)
|
||||||
|
|
||||||
|
UiPackageWindow = QtWidgets.QMainWindow()
|
||||||
|
package_ui = gui.Ui_PackageWindow()
|
||||||
|
package_ui.setupUi(UiPackageWindow)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
UiMainWindow.show()
|
UiMainWindow.show()
|
||||||
from modules.login import loginload
|
from modules.login import loginload
|
||||||
@@ -177,6 +182,43 @@ def login_logout_gui():
|
|||||||
ui.username_box.setText(login())
|
ui.username_box.setText(login())
|
||||||
|
|
||||||
|
|
||||||
|
def get_users_apps():
|
||||||
|
def get_threaded():
|
||||||
|
apps = requests.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/users/public"
|
||||||
|
f"/{ui.username_box.text()}").json()
|
||||||
|
try:
|
||||||
|
if apps['message'] == 'Too many requests':
|
||||||
|
while apps['message'] == 'Too many requests':
|
||||||
|
time.sleep(0.5)
|
||||||
|
apps = requests.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/users/public"
|
||||||
|
f"/{ui.username_box.text()}").json()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
apps = apps['packages']
|
||||||
|
ui.manage_packages_table.clear()
|
||||||
|
ui.manage_packages_table.setColumnCount(4)
|
||||||
|
ui.manage_packages_table.setRowCount(math.ceil(len(apps) / 4))
|
||||||
|
for i in range(len(apps)):
|
||||||
|
ui.manage_packages_table.setItem(i // 4, i % 4, QtWidgets.QTableWidgetItem(str(apps[i])))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
threading.Thread(target=get_threaded).start()
|
||||||
|
|
||||||
|
|
||||||
|
def gui_package_edit():
|
||||||
|
from modules.package_edit import edit
|
||||||
|
try:
|
||||||
|
app_name = ui.manage_packages_table.currentItem().text()
|
||||||
|
if app_name == "":
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
UiPackageWindow.show()
|
||||||
|
edit(app_name, UiPackageWindow)
|
||||||
|
except:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
# Run functions on startup
|
# Run functions on startup
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# Checking version
|
# Checking version
|
||||||
@@ -201,6 +243,7 @@ if __name__ == "__main__":
|
|||||||
os.system('horsy_updater.exe horsygui')
|
os.system('horsy_updater.exe horsygui')
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
|
get_users_apps()
|
||||||
installed_apps()
|
installed_apps()
|
||||||
|
|
||||||
# Binds
|
# Binds
|
||||||
@@ -220,6 +263,7 @@ if __name__ == "__main__":
|
|||||||
ui.changepass_button.clicked.connect(change_password_gui)
|
ui.changepass_button.clicked.connect(change_password_gui)
|
||||||
ui.changeemail_button.clicked.connect(change_email_gui)
|
ui.changeemail_button.clicked.connect(change_email_gui)
|
||||||
ui.loginlogout_button.clicked.connect(login_logout_gui)
|
ui.loginlogout_button.clicked.connect(login_logout_gui)
|
||||||
|
ui.manage_packages_table.itemDoubleClicked.connect(gui_package_edit)
|
||||||
|
|
||||||
# Handle GUI exiting to exit whole program
|
# Handle GUI exiting to exit whole program
|
||||||
sys.exit(app.exec_())
|
sys.exit(app.exec_())
|
||||||
|
|||||||
140
modules/gui.py
140
modules/gui.py
@@ -93,22 +93,22 @@ class Ui_MainWindow(object):
|
|||||||
"border-radius: 5px; \n"
|
"border-radius: 5px; \n"
|
||||||
"color: rgb(242, 242, 242);\n"
|
"color: rgb(242, 242, 242);\n"
|
||||||
"padding: 0px 5px 0px 5px;\n")
|
"padding: 0px 5px 0px 5px;\n")
|
||||||
self.username_box.setText("")
|
self.username_box.setText("Log in first")
|
||||||
self.username_box.setReadOnly(True)
|
self.username_box.setReadOnly(True)
|
||||||
self.username_box.setObjectName("username_box")
|
self.username_box.setObjectName("username_box")
|
||||||
self.regmessage_box = QtWidgets.QLineEdit(self.account_tab)
|
self.regmessage_box = QtWidgets.QLineEdit(self.account_tab)
|
||||||
self.regmessage_box.setGeometry(QtCore.QRect(720, 110, 151, 31))
|
self.regmessage_box.setGeometry(QtCore.QRect(720, 110, 151, 31))
|
||||||
self.regmessage_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
self.regmessage_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
"border-radius: 5px; \n"
|
"border-radius: 5px; \n"
|
||||||
"color: rgb(27, 166, 221);")
|
"color: rgb(27, 166, 221);")
|
||||||
self.regmessage_box.setText(" Still not registered? Click here")
|
self.regmessage_box.setText(" Still not registered? Click here")
|
||||||
self.regmessage_box.setReadOnly(True)
|
self.regmessage_box.setReadOnly(True)
|
||||||
self.regmessage_box.setObjectName("regmessage_box")
|
self.regmessage_box.setObjectName("regmessage_box")
|
||||||
self.regmessage_button = QtWidgets.QPushButton(self.account_tab)
|
self.regmessage_button = QtWidgets.QPushButton(self.account_tab)
|
||||||
self.regmessage_button.setGeometry(QtCore.QRect(720, 110, 151, 31))
|
self.regmessage_button.setGeometry(QtCore.QRect(720, 110, 151, 31))
|
||||||
self.regmessage_button.setStyleSheet("background-color: rgb(0, 0, 0, 0);\n"
|
self.regmessage_button.setStyleSheet("background-color: rgb(0, 0, 0, 0);\n"
|
||||||
"border-color: rgb(0, 0, 0, 0);\n"
|
"border-color: rgb(0, 0, 0, 0);\n"
|
||||||
"color: rgb(0, 0, 0, 0);")
|
"color: rgb(0, 0, 0, 0);")
|
||||||
self.regmessage_button.setText("")
|
self.regmessage_button.setText("")
|
||||||
self.regmessage_button.setObjectName("regmessage_button")
|
self.regmessage_button.setObjectName("regmessage_button")
|
||||||
self.changeemail_button = QtWidgets.QPushButton(self.account_tab)
|
self.changeemail_button = QtWidgets.QPushButton(self.account_tab)
|
||||||
@@ -202,13 +202,13 @@ class Ui_MainWindow(object):
|
|||||||
self.manage_packages_table = QtWidgets.QTableWidget(self.account_tab)
|
self.manage_packages_table = QtWidgets.QTableWidget(self.account_tab)
|
||||||
self.manage_packages_table.setGeometry(QtCore.QRect(10, 240, 871, 411))
|
self.manage_packages_table.setGeometry(QtCore.QRect(10, 240, 871, 411))
|
||||||
self.manage_packages_table.setStyleSheet("QTableWidget\n"
|
self.manage_packages_table.setStyleSheet("QTableWidget\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
"color: white;\n"
|
"color: white;\n"
|
||||||
"font: 15pt \"MS Shell Dlg 2\";\n"
|
"font: 15pt \"MS Shell Dlg 2\";\n"
|
||||||
"margin: 20px;\n"
|
"margin: 20px;\n"
|
||||||
"border-radius: 45px;\n"
|
"border-radius: 45px;\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"")
|
"")
|
||||||
self.manage_packages_table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
|
self.manage_packages_table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
|
||||||
self.manage_packages_table.setAutoScroll(False)
|
self.manage_packages_table.setAutoScroll(False)
|
||||||
self.manage_packages_table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
|
self.manage_packages_table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
|
||||||
@@ -217,7 +217,7 @@ class Ui_MainWindow(object):
|
|||||||
self.manage_packages_table.setDragDropOverwriteMode(False)
|
self.manage_packages_table.setDragDropOverwriteMode(False)
|
||||||
self.manage_packages_table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
|
self.manage_packages_table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
|
||||||
self.manage_packages_table.setShowGrid(False)
|
self.manage_packages_table.setShowGrid(False)
|
||||||
self.manage_packages_table.setObjectName("manage_packages_table")
|
self.manage_packages_table.setObjectName("installed_table")
|
||||||
self.manage_packages_table.horizontalHeader().setVisible(False)
|
self.manage_packages_table.horizontalHeader().setVisible(False)
|
||||||
self.manage_packages_table.horizontalHeader().setDefaultSectionSize(203)
|
self.manage_packages_table.horizontalHeader().setDefaultSectionSize(203)
|
||||||
self.manage_packages_table.horizontalHeader().setHighlightSections(False)
|
self.manage_packages_table.horizontalHeader().setHighlightSections(False)
|
||||||
@@ -225,6 +225,10 @@ class Ui_MainWindow(object):
|
|||||||
self.manage_packages_table.verticalHeader().setVisible(False)
|
self.manage_packages_table.verticalHeader().setVisible(False)
|
||||||
self.manage_packages_table.verticalHeader().setDefaultSectionSize(120)
|
self.manage_packages_table.verticalHeader().setDefaultSectionSize(120)
|
||||||
self.manage_packages_table.verticalHeader().setHighlightSections(False)
|
self.manage_packages_table.verticalHeader().setHighlightSections(False)
|
||||||
|
self.manage_packages_table.setLayoutDirection(QtCore.Qt.LeftToRight)
|
||||||
|
self.manage_packages_table.setColumnCount(0)
|
||||||
|
self.manage_packages_table.setRowCount(0)
|
||||||
|
self.manage_packages_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
||||||
self.manage_packages_message = QtWidgets.QTextBrowser(self.account_tab)
|
self.manage_packages_message = QtWidgets.QTextBrowser(self.account_tab)
|
||||||
self.manage_packages_message.setGeometry(QtCore.QRect(380, 230, 121, 21))
|
self.manage_packages_message.setGeometry(QtCore.QRect(380, 230, 121, 21))
|
||||||
self.manage_packages_message.setStyleSheet("color: white;\n"
|
self.manage_packages_message.setStyleSheet("color: white;\n"
|
||||||
@@ -803,6 +807,116 @@ class Ui_DownloadWindow(object):
|
|||||||
self.logs_box.setPlaceholderText(_translate("MainWindow", "Logs"))
|
self.logs_box.setPlaceholderText(_translate("MainWindow", "Logs"))
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_PackageWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
MainWindow.setObjectName("MainWindow")
|
||||||
|
MainWindow.resize(331, 433)
|
||||||
|
MainWindow.setMinimumSize(QtCore.QSize(331, 433))
|
||||||
|
MainWindow.setMaximumSize(QtCore.QSize(331, 433))
|
||||||
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
|
self.centralwidget.setStyleSheet("QWidget{\n"
|
||||||
|
" background-color: rgb(30, 30, 30);\n"
|
||||||
|
"}\n"
|
||||||
|
"")
|
||||||
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
|
self.packagename_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.packagename_box.setGeometry(QtCore.QRect(20, 20, 151, 31))
|
||||||
|
self.packagename_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.packagename_box.setText("")
|
||||||
|
self.packagename_box.setReadOnly(True)
|
||||||
|
self.packagename_box.setObjectName("packagename_box")
|
||||||
|
self.main_exe_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.main_exe_box.setGeometry(QtCore.QRect(20, 305, 291, 31))
|
||||||
|
self.main_exe_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.main_exe_box.setObjectName("main_exe_box")
|
||||||
|
self.source_url_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.source_url_box.setGeometry(QtCore.QRect(20, 200, 291, 31))
|
||||||
|
self.source_url_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.source_url_box.setObjectName("source_url_box")
|
||||||
|
self.url_of_exe_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.url_of_exe_box.setGeometry(QtCore.QRect(20, 165, 291, 31))
|
||||||
|
self.url_of_exe_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.url_of_exe_box.setObjectName("url_of_exe_box")
|
||||||
|
self.dependency_url_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.dependency_url_box.setGeometry(QtCore.QRect(20, 235, 291, 31))
|
||||||
|
self.dependency_url_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.dependency_url_box.setObjectName("dependency_url_box")
|
||||||
|
self.dependency_run_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.dependency_run_box.setGeometry(QtCore.QRect(20, 270, 291, 31))
|
||||||
|
self.dependency_run_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.dependency_run_box.setObjectName("dependency_run_box")
|
||||||
|
self.package_desc_box = QtWidgets.QTextBrowser(self.centralwidget)
|
||||||
|
self.package_desc_box.setGeometry(QtCore.QRect(20, 60, 256, 101))
|
||||||
|
self.package_desc_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.package_desc_box.setAcceptRichText(False)
|
||||||
|
self.package_desc_box.setTextInteractionFlags(
|
||||||
|
QtCore.Qt.LinksAccessibleByKeyboard | QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextBrowserInteraction | QtCore.Qt.TextEditable | QtCore.Qt.TextEditorInteraction | QtCore.Qt.TextSelectableByKeyboard | QtCore.Qt.TextSelectableByMouse)
|
||||||
|
self.package_desc_box.setObjectName("package_desc_box")
|
||||||
|
self.update_button = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.update_button.setEnabled(True)
|
||||||
|
self.update_button.setGeometry(QtCore.QRect(20, 360, 291, 50))
|
||||||
|
self.update_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
|
self.update_button.setStyleSheet("QPushButton {\n"
|
||||||
|
" color: rgb(204, 204, 204);\n"
|
||||||
|
" border-width: 1px;\n"
|
||||||
|
" border-radius:6px;\n"
|
||||||
|
" border-style: solid;\n"
|
||||||
|
" background-color: rgb(28, 30, 33);\n"
|
||||||
|
" border-color: rgb(66, 143, 225);\n"
|
||||||
|
"}\n"
|
||||||
|
"QPushButton:hover{\n"
|
||||||
|
" border-width: 2px;\n"
|
||||||
|
"}\n"
|
||||||
|
"QPushButton:pressed{\n"
|
||||||
|
" background-color: rgb(50, 60, 63);\n"
|
||||||
|
"}\n"
|
||||||
|
"QPushButton:disabled{\n"
|
||||||
|
" border-width: 0px;\n"
|
||||||
|
" background-color: rgb(92, 99, 109);\n"
|
||||||
|
"}")
|
||||||
|
self.update_button.setObjectName("update_button")
|
||||||
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
MainWindow.setWindowTitle(_translate("MainWindow", "horsy - editing package"))
|
||||||
|
self.packagename_box.setPlaceholderText(_translate("MainWindow", "Editing package"))
|
||||||
|
self.main_exe_box.setPlaceholderText(
|
||||||
|
_translate("MainWindow", "Main executable command (file.exe, python main.py, etc)"))
|
||||||
|
self.source_url_box.setPlaceholderText(
|
||||||
|
_translate("MainWindow", "Url of source (project on GitHub, source archive)"))
|
||||||
|
self.url_of_exe_box.setPlaceholderText(_translate("MainWindow", "Url of executable (ends on .exe or .zip)"))
|
||||||
|
self.dependency_url_box.setPlaceholderText(_translate("MainWindow", "Dependency URL (installer in .exe)"))
|
||||||
|
self.dependency_run_box.setPlaceholderText(
|
||||||
|
_translate("MainWindow", "Dependency run (run this during installation)"))
|
||||||
|
self.package_desc_box.setHtml(_translate("MainWindow",
|
||||||
|
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
|
||||||
|
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
|
||||||
|
"p, li { white-space: pre-wrap; }\n"
|
||||||
|
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
|
||||||
|
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
|
||||||
|
self.package_desc_box.setPlaceholderText(
|
||||||
|
_translate("MainWindow", "Package description. It should be a short text under 256 characters"))
|
||||||
|
self.update_button.setText(_translate("MainWindow", "Update"))
|
||||||
|
|
||||||
|
|
||||||
def popup(title, text):
|
def popup(title, text):
|
||||||
QtWidgets.QMessageBox.information(None, title, text)
|
QtWidgets.QMessageBox.information(None, title, text)
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import zipfile
|
|||||||
from modules.virustotal import get_key, scan_file, get_report
|
from modules.virustotal import get_key, scan_file, get_report
|
||||||
|
|
||||||
|
|
||||||
def install(package, is_gui=False, UiDownloadWindow=None, ui_download=None):
|
def install(package):
|
||||||
r = requests.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}").text
|
r = requests.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}").text
|
||||||
if r == "":
|
if r == "":
|
||||||
print(f"[red]Package {package} not found[/]")
|
print(f"[red]Package {package} not found[/]")
|
||||||
@@ -127,7 +127,7 @@ def install(package, is_gui=False, UiDownloadWindow=None, ui_download=None):
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
def uninstall(package, is_gui=False):
|
def uninstall(package):
|
||||||
if os.path.exists('{1}apps/{0}'.format(package, horsy_vars.horsypath)):
|
if os.path.exists('{1}apps/{0}'.format(package, horsy_vars.horsypath)):
|
||||||
os.system('rmdir /s /q "{1}apps/{0}"'.format(package, horsy_vars.horsypath))
|
os.system('rmdir /s /q "{1}apps/{0}"'.format(package, horsy_vars.horsypath))
|
||||||
print(f"[green][OK] Files deleted[/]")
|
print(f"[green][OK] Files deleted[/]")
|
||||||
|
|||||||
69
modules/package_edit.py
Normal file
69
modules/package_edit.py
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
import time
|
||||||
|
from modules.auth import get_auth
|
||||||
|
from horsygui import login_ui, UiLoginWindow as Ui_LoginWindow
|
||||||
|
import modules.gui as gui
|
||||||
|
import requests
|
||||||
|
from PyQt5 import QtWidgets
|
||||||
|
import modules.vars as horsy_vars
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
def edit(package, UiPackageWindow):
|
||||||
|
package_ui = gui.Ui_PackageWindow()
|
||||||
|
package_ui.setupUi(UiPackageWindow)
|
||||||
|
|
||||||
|
r = requests.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}").text
|
||||||
|
if r == "":
|
||||||
|
gui.cpopup("Installation", f"Package {package} not found")
|
||||||
|
return f"Package {package} not found"
|
||||||
|
try:
|
||||||
|
r = json.loads(r)
|
||||||
|
except:
|
||||||
|
print("[red]Error with unsupported message[/]")
|
||||||
|
gui.cpopup("Error", "Error with unsupported message")
|
||||||
|
return "Error with unsupported message"
|
||||||
|
try:
|
||||||
|
if r["message"] == "Internal server error":
|
||||||
|
print("Internal server error")
|
||||||
|
gui.cpopup("Error", "Internal server error")
|
||||||
|
return "Internal server error"
|
||||||
|
if r["message"] == "Too many requests":
|
||||||
|
try:
|
||||||
|
if r['message'] == 'Too many requests':
|
||||||
|
while r['message'] == 'Too many requests':
|
||||||
|
time.sleep(0.5)
|
||||||
|
r = requests.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}").text
|
||||||
|
try:
|
||||||
|
r = json.loads(r)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
package_ui.packagename_box.setText("Editing package " + r["name"])
|
||||||
|
package_ui.package_desc_box.setText(r["description"])
|
||||||
|
package_ui.url_of_exe_box.setText(r["url"])
|
||||||
|
package_ui.source_url_box.setText(r["sourceUrl"])
|
||||||
|
package_ui.dependency_url_box.setText(r["download"])
|
||||||
|
package_ui.dependency_run_box.setText(r["install"])
|
||||||
|
package_ui.main_exe_box.setText(r["run"])
|
||||||
|
|
||||||
|
UiPackageWindow.show()
|
||||||
|
|
||||||
|
def send():
|
||||||
|
body = {
|
||||||
|
'auth': get_auth(True, login_ui, Ui_LoginWindow),
|
||||||
|
'name': package,
|
||||||
|
'description': (lambda x: x if x != '' else None)(package_ui.package_desc_box.toPlainText()),
|
||||||
|
'url': (lambda x: x if x != '' else None)(package_ui.url_of_exe_box.text()),
|
||||||
|
'sourceUrl': (lambda x: x if x != '' else None)(package_ui.source_url_box.text()),
|
||||||
|
'download': (lambda x: x if x != '' else None)(package_ui.dependency_url_box.text()),
|
||||||
|
'install': (lambda x: x if x != '' else None)(package_ui.dependency_run_box.text()),
|
||||||
|
'run': (lambda x: x if x != '' else None)(package_ui.main_exe_box.text())
|
||||||
|
}
|
||||||
|
|
||||||
|
r = requests.put(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages", json=body).text # TODO: add error handling
|
||||||
|
|
||||||
|
package_ui.update_button.clicked.connect(send)
|
||||||
@@ -385,6 +385,9 @@ QPushButton:disabled{
|
|||||||
<height>411</height>
|
<height>411</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::LeftToRight</enum>
|
||||||
|
</property>
|
||||||
<property name="styleSheet">
|
<property name="styleSheet">
|
||||||
<string notr="true">QTableWidget
|
<string notr="true">QTableWidget
|
||||||
{
|
{
|
||||||
@@ -423,10 +426,10 @@ border-radius: 45px;
|
|||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="rowCount">
|
<property name="rowCount">
|
||||||
<number>1</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="columnCount">
|
<property name="columnCount">
|
||||||
<number>4</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<attribute name="horizontalHeaderVisible">
|
<attribute name="horizontalHeaderVisible">
|
||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
@@ -449,21 +452,6 @@ border-radius: 45px;
|
|||||||
<attribute name="verticalHeaderHighlightSections">
|
<attribute name="verticalHeaderHighlightSections">
|
||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</attribute>
|
</attribute>
|
||||||
<row/>
|
|
||||||
<column/>
|
|
||||||
<column/>
|
|
||||||
<column/>
|
|
||||||
<column/>
|
|
||||||
<item row="0" column="0">
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QTextBrowser" name="manage_packages_message">
|
<widget class="QTextBrowser" name="manage_packages_message">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
|
|||||||
123
uis/horsy_package.py
Normal file
123
uis/horsy_package.py
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'D:\RAZNOE\prgrming\horsy\Source\client\uis\horsy_package.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt5 UI code generator 5.15.6
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_MainWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
MainWindow.setObjectName("MainWindow")
|
||||||
|
MainWindow.resize(331, 433)
|
||||||
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
|
self.centralwidget.setStyleSheet("QWidget{\n"
|
||||||
|
" background-color: rgb(30, 30, 30);\n"
|
||||||
|
"}\n"
|
||||||
|
"")
|
||||||
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
|
self.packagename_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.packagename_box.setGeometry(QtCore.QRect(20, 20, 151, 31))
|
||||||
|
self.packagename_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.packagename_box.setText("")
|
||||||
|
self.packagename_box.setReadOnly(True)
|
||||||
|
self.packagename_box.setObjectName("packagename_box")
|
||||||
|
self.main_exe_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.main_exe_box.setGeometry(QtCore.QRect(20, 305, 291, 31))
|
||||||
|
self.main_exe_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.main_exe_box.setObjectName("main_exe_box")
|
||||||
|
self.source_url_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.source_url_box.setGeometry(QtCore.QRect(20, 200, 291, 31))
|
||||||
|
self.source_url_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.source_url_box.setObjectName("source_url_box")
|
||||||
|
self.url_of_exe_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.url_of_exe_box.setGeometry(QtCore.QRect(20, 165, 291, 31))
|
||||||
|
self.url_of_exe_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.url_of_exe_box.setObjectName("url_of_exe_box")
|
||||||
|
self.dependency_url_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.dependency_url_box.setGeometry(QtCore.QRect(20, 235, 291, 31))
|
||||||
|
self.dependency_url_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.dependency_url_box.setObjectName("dependency_url_box")
|
||||||
|
self.dependency_run_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
|
self.dependency_run_box.setGeometry(QtCore.QRect(20, 270, 291, 31))
|
||||||
|
self.dependency_run_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.dependency_run_box.setObjectName("dependency_run_box")
|
||||||
|
self.package_desc_box = QtWidgets.QTextBrowser(self.centralwidget)
|
||||||
|
self.package_desc_box.setGeometry(QtCore.QRect(20, 60, 256, 101))
|
||||||
|
self.package_desc_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||||
|
"border-radius: 5px; \n"
|
||||||
|
"color: rgb(242, 242, 242);")
|
||||||
|
self.package_desc_box.setAcceptRichText(False)
|
||||||
|
self.package_desc_box.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByKeyboard|QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextBrowserInteraction|QtCore.Qt.TextEditable|QtCore.Qt.TextEditorInteraction|QtCore.Qt.TextSelectableByKeyboard|QtCore.Qt.TextSelectableByMouse)
|
||||||
|
self.package_desc_box.setObjectName("package_desc_box")
|
||||||
|
self.update_button = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.update_button.setEnabled(True)
|
||||||
|
self.update_button.setGeometry(QtCore.QRect(20, 360, 291, 50))
|
||||||
|
self.update_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
|
self.update_button.setStyleSheet("QPushButton {\n"
|
||||||
|
" color: rgb(204, 204, 204);\n"
|
||||||
|
" border-width: 1px;\n"
|
||||||
|
" border-radius:6px;\n"
|
||||||
|
" border-style: solid;\n"
|
||||||
|
" background-color: rgb(28, 30, 33);\n"
|
||||||
|
" border-color: rgb(66, 143, 225);\n"
|
||||||
|
"}\n"
|
||||||
|
"QPushButton:hover{\n"
|
||||||
|
" border-width: 2px;\n"
|
||||||
|
"}\n"
|
||||||
|
"QPushButton:pressed{\n"
|
||||||
|
" background-color: rgb(50, 60, 63);\n"
|
||||||
|
"}\n"
|
||||||
|
"QPushButton:disabled{\n"
|
||||||
|
" border-width: 0px;\n"
|
||||||
|
" background-color: rgb(92, 99, 109);\n"
|
||||||
|
"}")
|
||||||
|
self.update_button.setObjectName("update_button")
|
||||||
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
MainWindow.setWindowTitle(_translate("MainWindow", "horsy - editing package"))
|
||||||
|
self.packagename_box.setPlaceholderText(_translate("MainWindow", "Editing package"))
|
||||||
|
self.main_exe_box.setPlaceholderText(_translate("MainWindow", "Main executable command (file.exe, python main.py, etc)"))
|
||||||
|
self.source_url_box.setPlaceholderText(_translate("MainWindow", "Url of source (project on GitHub, source archive)"))
|
||||||
|
self.url_of_exe_box.setPlaceholderText(_translate("MainWindow", "Url of executable (ends on .exe or .zip)"))
|
||||||
|
self.dependency_url_box.setPlaceholderText(_translate("MainWindow", "Dependency URL (installer in .exe)"))
|
||||||
|
self.dependency_run_box.setPlaceholderText(_translate("MainWindow", "Dependency run (run this during installation)"))
|
||||||
|
self.package_desc_box.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
|
||||||
|
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
|
||||||
|
"p, li { white-space: pre-wrap; }\n"
|
||||||
|
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
|
||||||
|
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
|
||||||
|
self.package_desc_box.setPlaceholderText(_translate("MainWindow", "Package description. It should be a short text under 256 characters"))
|
||||||
|
self.update_button.setText(_translate("MainWindow", "Update"))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
MainWindow = QtWidgets.QMainWindow()
|
||||||
|
ui = Ui_MainWindow()
|
||||||
|
ui.setupUi(MainWindow)
|
||||||
|
MainWindow.show()
|
||||||
|
sys.exit(app.exec_())
|
||||||
214
uis/horsy_package.ui
Normal file
214
uis/horsy_package.ui
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>331</width>
|
||||||
|
<height>433</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>horsy - editing package</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QWidget{
|
||||||
|
background-color: rgb(30, 30, 30);
|
||||||
|
}
|
||||||
|
</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLineEdit" name="packagename_box">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>151</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(74, 76, 83);
|
||||||
|
border-radius: 5px;
|
||||||
|
color: rgb(242, 242, 242);</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Editing package</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="main_exe_box">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>305</y>
|
||||||
|
<width>291</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(74, 76, 83);
|
||||||
|
border-radius: 5px;
|
||||||
|
color: rgb(242, 242, 242);</string>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Main executable command (file.exe, python main.py, etc)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="source_url_box">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>200</y>
|
||||||
|
<width>291</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(74, 76, 83);
|
||||||
|
border-radius: 5px;
|
||||||
|
color: rgb(242, 242, 242);</string>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Url of source (project on GitHub, source archive)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="url_of_exe_box">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>165</y>
|
||||||
|
<width>291</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(74, 76, 83);
|
||||||
|
border-radius: 5px;
|
||||||
|
color: rgb(242, 242, 242);</string>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Url of executable (ends on .exe or .zip)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="dependency_url_box">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>235</y>
|
||||||
|
<width>291</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(74, 76, 83);
|
||||||
|
border-radius: 5px;
|
||||||
|
color: rgb(242, 242, 242);</string>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Dependency URL (installer in .exe)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="dependency_run_box">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>270</y>
|
||||||
|
<width>291</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(74, 76, 83);
|
||||||
|
border-radius: 5px;
|
||||||
|
color: rgb(242, 242, 242);</string>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Dependency run (run this during installation)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QTextBrowser" name="package_desc_box">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>256</width>
|
||||||
|
<height>101</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(74, 76, 83);
|
||||||
|
border-radius: 5px;
|
||||||
|
color: rgb(242, 242, 242);</string>
|
||||||
|
</property>
|
||||||
|
<property name="html">
|
||||||
|
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||||
|
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||||
|
p, li { white-space: pre-wrap; }
|
||||||
|
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
|
||||||
|
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="acceptRichText">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="textInteractionFlags">
|
||||||
|
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextEditable|Qt::TextEditorInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Package description. It should be a short text under 256 characters</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="update_button">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>360</y>
|
||||||
|
<width>291</width>
|
||||||
|
<height>50</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>50</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QPushButton {
|
||||||
|
color: rgb(204, 204, 204);
|
||||||
|
border-width: 1px;
|
||||||
|
border-radius:6px;
|
||||||
|
border-style: solid;
|
||||||
|
background-color: rgb(28, 30, 33);
|
||||||
|
border-color: rgb(66, 143, 225);
|
||||||
|
}
|
||||||
|
QPushButton:hover{
|
||||||
|
border-width: 2px;
|
||||||
|
}
|
||||||
|
QPushButton:pressed{
|
||||||
|
background-color: rgb(50, 60, 63);
|
||||||
|
}
|
||||||
|
QPushButton:disabled{
|
||||||
|
border-width: 0px;
|
||||||
|
background-color: rgb(92, 99, 109);
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Update</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
Reference in New Issue
Block a user