Package editing
This commit is contained in:
140
modules/gui.py
140
modules/gui.py
@@ -93,22 +93,22 @@ class Ui_MainWindow(object):
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);\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.setObjectName("username_box")
|
||||
self.regmessage_box = QtWidgets.QLineEdit(self.account_tab)
|
||||
self.regmessage_box.setGeometry(QtCore.QRect(720, 110, 151, 31))
|
||||
self.regmessage_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(27, 166, 221);")
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(27, 166, 221);")
|
||||
self.regmessage_box.setText(" Still not registered? Click here")
|
||||
self.regmessage_box.setReadOnly(True)
|
||||
self.regmessage_box.setObjectName("regmessage_box")
|
||||
self.regmessage_button = QtWidgets.QPushButton(self.account_tab)
|
||||
self.regmessage_button.setGeometry(QtCore.QRect(720, 110, 151, 31))
|
||||
self.regmessage_button.setStyleSheet("background-color: rgb(0, 0, 0, 0);\n"
|
||||
"border-color: rgb(0, 0, 0, 0);\n"
|
||||
"color: rgb(0, 0, 0, 0);")
|
||||
"border-color: rgb(0, 0, 0, 0);\n"
|
||||
"color: rgb(0, 0, 0, 0);")
|
||||
self.regmessage_button.setText("")
|
||||
self.regmessage_button.setObjectName("regmessage_button")
|
||||
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.setGeometry(QtCore.QRect(10, 240, 871, 411))
|
||||
self.manage_packages_table.setStyleSheet("QTableWidget\n"
|
||||
"{\n"
|
||||
"color: white;\n"
|
||||
"font: 15pt \"MS Shell Dlg 2\";\n"
|
||||
"margin: 20px;\n"
|
||||
"border-radius: 45px;\n"
|
||||
"}\n"
|
||||
"")
|
||||
"{\n"
|
||||
"color: white;\n"
|
||||
"font: 15pt \"MS Shell Dlg 2\";\n"
|
||||
"margin: 20px;\n"
|
||||
"border-radius: 45px;\n"
|
||||
"}\n"
|
||||
"")
|
||||
self.manage_packages_table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
|
||||
self.manage_packages_table.setAutoScroll(False)
|
||||
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.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
|
||||
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().setDefaultSectionSize(203)
|
||||
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().setDefaultSectionSize(120)
|
||||
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.setGeometry(QtCore.QRect(380, 230, 121, 21))
|
||||
self.manage_packages_message.setStyleSheet("color: white;\n"
|
||||
@@ -803,6 +807,116 @@ class Ui_DownloadWindow(object):
|
||||
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):
|
||||
QtWidgets.QMessageBox.information(None, title, text)
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import zipfile
|
||||
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
|
||||
if r == "":
|
||||
print(f"[red]Package {package} not found[/]")
|
||||
@@ -127,7 +127,7 @@ def install(package, is_gui=False, UiDownloadWindow=None, ui_download=None):
|
||||
return
|
||||
|
||||
|
||||
def uninstall(package, is_gui=False):
|
||||
def uninstall(package):
|
||||
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))
|
||||
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)
|
||||
Reference in New Issue
Block a user