Updated scrollbars and added comments
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
# Legacy, only if normal update method is not working
|
||||||
import argparse
|
import argparse
|
||||||
import urllib.request
|
import urllib.request
|
||||||
import threading
|
import threading
|
||||||
|
|||||||
77
horsygui.py
77
horsygui.py
@@ -42,10 +42,19 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
# Connected functions
|
# Connected functions
|
||||||
def refresh_gui():
|
def refresh_gui():
|
||||||
|
"""
|
||||||
|
Updates the GUI with the latest data
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
installed_apps()
|
installed_apps()
|
||||||
|
|
||||||
|
|
||||||
def fill_installed(apps: list):
|
def fill_installed(apps: list):
|
||||||
|
"""
|
||||||
|
Fills the installed apps table with the given list of apps.
|
||||||
|
:param apps:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
ui.installed_table.clear()
|
ui.installed_table.clear()
|
||||||
ui.installed_table.setColumnCount(4)
|
ui.installed_table.setColumnCount(4)
|
||||||
ui.installed_table.setRowCount(math.ceil(len(apps) / 4))
|
ui.installed_table.setRowCount(math.ceil(len(apps) / 4))
|
||||||
@@ -54,11 +63,19 @@ def fill_installed(apps: list):
|
|||||||
|
|
||||||
|
|
||||||
def installed_apps():
|
def installed_apps():
|
||||||
|
"""
|
||||||
|
Gets the list of installed apps and fills the table.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.manager import apps_list
|
from modules.manager import apps_list
|
||||||
fill_installed(apps_list(True))
|
fill_installed(apps_list(True))
|
||||||
|
|
||||||
|
|
||||||
def update_app():
|
def update_app():
|
||||||
|
"""
|
||||||
|
Updates the selected app.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
app_name = ui.installed_table.currentItem().text().replace('!', '')
|
app_name = ui.installed_table.currentItem().text().replace('!', '')
|
||||||
if app_name == "":
|
if app_name == "":
|
||||||
@@ -72,6 +89,10 @@ def update_app():
|
|||||||
|
|
||||||
|
|
||||||
def uninstall_app():
|
def uninstall_app():
|
||||||
|
"""
|
||||||
|
Uninstalls the selected app.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
app_name = ui.installed_table.currentItem().text().replace('!', '')
|
app_name = ui.installed_table.currentItem().text().replace('!', '')
|
||||||
if app_name == "":
|
if app_name == "":
|
||||||
@@ -85,6 +106,10 @@ def uninstall_app():
|
|||||||
|
|
||||||
|
|
||||||
def search_gui():
|
def search_gui():
|
||||||
|
"""
|
||||||
|
Searches for apps and fills the table.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.search import search
|
from modules.search import search
|
||||||
search_query = ui.search_box.toPlainText()
|
search_query = ui.search_box.toPlainText()
|
||||||
if search_query == "":
|
if search_query == "":
|
||||||
@@ -99,6 +124,10 @@ def search_gui():
|
|||||||
|
|
||||||
|
|
||||||
def install_app():
|
def install_app():
|
||||||
|
"""
|
||||||
|
Installs the selected app.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.gui_manager import install
|
from modules.gui_manager import install
|
||||||
try:
|
try:
|
||||||
app_name = ui.search_table.currentItem().text()
|
app_name = ui.search_table.currentItem().text()
|
||||||
@@ -111,6 +140,10 @@ def install_app():
|
|||||||
|
|
||||||
|
|
||||||
def check_updates():
|
def check_updates():
|
||||||
|
"""
|
||||||
|
Checks for updates.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.updates import check
|
from modules.updates import check
|
||||||
needupdate = check(True)
|
needupdate = check(True)
|
||||||
try:
|
try:
|
||||||
@@ -120,6 +153,10 @@ def check_updates():
|
|||||||
|
|
||||||
|
|
||||||
def get_source_gui():
|
def get_source_gui():
|
||||||
|
"""
|
||||||
|
Gets the source code of the selected app.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.source import get_source
|
from modules.source import get_source
|
||||||
try:
|
try:
|
||||||
app_name = ui.search_table.currentItem().text()
|
app_name = ui.search_table.currentItem().text()
|
||||||
@@ -134,6 +171,10 @@ def get_source_gui():
|
|||||||
|
|
||||||
|
|
||||||
def info_gui():
|
def info_gui():
|
||||||
|
"""
|
||||||
|
Gets the info of the selected app.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.search import info
|
from modules.search import info
|
||||||
try:
|
try:
|
||||||
app_name = ui.search_table.currentItem().text()
|
app_name = ui.search_table.currentItem().text()
|
||||||
@@ -148,6 +189,10 @@ def info_gui():
|
|||||||
|
|
||||||
|
|
||||||
def like_gui():
|
def like_gui():
|
||||||
|
"""
|
||||||
|
Likes the selected app.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.liker import like
|
from modules.liker import like
|
||||||
try:
|
try:
|
||||||
app_name = ui.search_table.currentItem().text()
|
app_name = ui.search_table.currentItem().text()
|
||||||
@@ -162,6 +207,10 @@ def like_gui():
|
|||||||
|
|
||||||
|
|
||||||
def dislike_gui():
|
def dislike_gui():
|
||||||
|
"""
|
||||||
|
Dislikes the selected app.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.liker import dislike
|
from modules.liker import dislike
|
||||||
try:
|
try:
|
||||||
app_name = ui.search_table.currentItem().text()
|
app_name = ui.search_table.currentItem().text()
|
||||||
@@ -176,26 +225,46 @@ def dislike_gui():
|
|||||||
|
|
||||||
|
|
||||||
def upload_gui():
|
def upload_gui():
|
||||||
|
"""
|
||||||
|
Uploads app to the server.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.uploader import upload
|
from modules.uploader import upload
|
||||||
gui.popup('Upload', str(upload(True, ui)))
|
gui.popup('Upload', str(upload(True, ui)))
|
||||||
|
|
||||||
|
|
||||||
def change_password_gui():
|
def change_password_gui():
|
||||||
|
"""
|
||||||
|
Changes the password.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.change_password import change
|
from modules.change_password import change
|
||||||
change(ui.oldpass_box.toPlainText(), ui.newpass_box.toPlainText())
|
change(ui.oldpass_box.toPlainText(), ui.newpass_box.toPlainText())
|
||||||
|
|
||||||
|
|
||||||
def change_email_gui():
|
def change_email_gui():
|
||||||
|
"""
|
||||||
|
Changes the email.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.change_email import change
|
from modules.change_email import change
|
||||||
change(ui.email_box.toPlainText())
|
change(ui.email_box.toPlainText())
|
||||||
|
|
||||||
|
|
||||||
def login_logout_gui():
|
def login_logout_gui():
|
||||||
|
"""
|
||||||
|
Logs in or logs out.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.login import login
|
from modules.login import login
|
||||||
ui.username_box.setText(login())
|
ui.username_box.setText(login())
|
||||||
|
|
||||||
|
|
||||||
def get_users_apps():
|
def get_users_apps():
|
||||||
|
"""
|
||||||
|
Gets the uploaded apps of the user.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
def get_threaded():
|
def get_threaded():
|
||||||
try:
|
try:
|
||||||
apps = request.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/users/public"
|
apps = request.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/users/public"
|
||||||
@@ -215,6 +284,10 @@ def get_users_apps():
|
|||||||
|
|
||||||
|
|
||||||
def gui_package_edit():
|
def gui_package_edit():
|
||||||
|
"""
|
||||||
|
Edits the selected package.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.package_edit import edit
|
from modules.package_edit import edit
|
||||||
try:
|
try:
|
||||||
app_name = ui.manage_packages_table.currentItem().text()
|
app_name = ui.manage_packages_table.currentItem().text()
|
||||||
@@ -228,6 +301,10 @@ def gui_package_edit():
|
|||||||
|
|
||||||
|
|
||||||
def gui_push_version():
|
def gui_push_version():
|
||||||
|
"""
|
||||||
|
Updates the selected package version.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
from modules.package_edit import push_version
|
from modules.package_edit import push_version
|
||||||
try:
|
try:
|
||||||
app_name = ui.manage_packages_table.currentItem().text()
|
app_name = ui.manage_packages_table.currentItem().text()
|
||||||
|
|||||||
431
modules/gui.py
431
modules/gui.py
@@ -1,5 +1,6 @@
|
|||||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
import modules.images # import images from binaries
|
import modules.images # import images from binaries
|
||||||
|
import modules.styles as styles
|
||||||
import ctypes
|
import ctypes
|
||||||
|
|
||||||
|
|
||||||
@@ -14,84 +15,7 @@ class Ui_MainWindow(object):
|
|||||||
MainWindow.setWindowIcon(icon)
|
MainWindow.setWindowIcon(icon)
|
||||||
MainWindow.setWindowOpacity(0.99)
|
MainWindow.setWindowOpacity(0.99)
|
||||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
self.centralwidget.setStyleSheet("""QWidget{\n"
|
self.centralwidget.setStyleSheet(styles.centralwidget)
|
||||||
background-color: rgb(30, 30, 30);
|
|
||||||
}
|
|
||||||
QScrollBar:horizontal {
|
|
||||||
border: none;
|
|
||||||
background: rgb(52, 59, 72);
|
|
||||||
height: 8px;
|
|
||||||
margin: 0px 21px 0 21px;
|
|
||||||
border-radius: 0px;
|
|
||||||
}
|
|
||||||
QScrollBar::handle:horizontal {
|
|
||||||
background: rgb(47, 48, 50);
|
|
||||||
min-width: 25px;
|
|
||||||
border-radius: 4px
|
|
||||||
}
|
|
||||||
QScrollBar::add-line:horizontal {
|
|
||||||
border: none;
|
|
||||||
background: rgb(55, 63, 77);
|
|
||||||
width: 20px;
|
|
||||||
border-top-right-radius: 4px;
|
|
||||||
border-bottom-right-radius: 4px;
|
|
||||||
subcontrol-position: right;
|
|
||||||
subcontrol-origin: margin;
|
|
||||||
}
|
|
||||||
QScrollBar::sub-line:horizontal {
|
|
||||||
border: none;
|
|
||||||
background: rgb(55, 63, 77);
|
|
||||||
width: 20px;
|
|
||||||
border-top-left-radius: 4px;
|
|
||||||
border-bottom-left-radius: 4px;
|
|
||||||
subcontrol-position: left;
|
|
||||||
subcontrol-origin: margin;
|
|
||||||
}
|
|
||||||
QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal
|
|
||||||
{
|
|
||||||
background: none;
|
|
||||||
}
|
|
||||||
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal
|
|
||||||
{
|
|
||||||
background: none;
|
|
||||||
}
|
|
||||||
QScrollBar:vertical {
|
|
||||||
border: none;
|
|
||||||
background: rgb(52, 59, 72);
|
|
||||||
width: 8px;
|
|
||||||
margin: 21px 0 21px 0;
|
|
||||||
border-radius: 0px;
|
|
||||||
}
|
|
||||||
QScrollBar::handle:vertical {
|
|
||||||
background: rgb(47, 48, 50);
|
|
||||||
min-height: 25px;
|
|
||||||
border-radius: 4px
|
|
||||||
}
|
|
||||||
QScrollBar::add-line:vertical {
|
|
||||||
border: none;
|
|
||||||
background: transparent;
|
|
||||||
height: 10px;
|
|
||||||
border-radius: 4px;
|
|
||||||
subcontrol-position: bottom;
|
|
||||||
subcontrol-origin: margin;
|
|
||||||
}
|
|
||||||
QScrollBar::sub-line:vertical {
|
|
||||||
border: none;
|
|
||||||
background: transparent;
|
|
||||||
height: 10px;
|
|
||||||
border-radius: 4px;
|
|
||||||
subcontrol-position: top;
|
|
||||||
subcontrol-origin: margin;
|
|
||||||
}
|
|
||||||
QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
|
|
||||||
background: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
|
|
||||||
background: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
""")
|
|
||||||
self.centralwidget.setObjectName("centralwidget")
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
self.horsy_logo_lefttop = QtWidgets.QLabel(self.centralwidget)
|
self.horsy_logo_lefttop = QtWidgets.QLabel(self.centralwidget)
|
||||||
self.horsy_logo_lefttop.setGeometry(QtCore.QRect(10, 10, 32, 32))
|
self.horsy_logo_lefttop.setGeometry(QtCore.QRect(10, 10, 32, 32))
|
||||||
@@ -104,33 +28,7 @@ QScrollBar:vertical {
|
|||||||
self.tabWidget.setToolTip("")
|
self.tabWidget.setToolTip("")
|
||||||
self.tabWidget.setLayoutDirection(QtCore.Qt.RightToLeft)
|
self.tabWidget.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||||
self.tabWidget.setAutoFillBackground(False)
|
self.tabWidget.setAutoFillBackground(False)
|
||||||
self.tabWidget.setStyleSheet("QTabBar::tab\n"
|
self.tabWidget.setStyleSheet(styles.tabwidget)
|
||||||
"{\n"
|
|
||||||
" background: rgb(22, 22, 22);\n"
|
|
||||||
" color: white; \n"
|
|
||||||
" font: 12pt \"MS Shell Dlg 2\";\n"
|
|
||||||
" width: 150px;\n"
|
|
||||||
" height: 21px;\n"
|
|
||||||
" padding: 13px;\n"
|
|
||||||
"}\n"
|
|
||||||
"\n"
|
|
||||||
"QTabBar::tab:selected\n"
|
|
||||||
"{\n"
|
|
||||||
" color: rgb(166, 184, 200);\n"
|
|
||||||
" background: rgb(45, 45, 45);\n"
|
|
||||||
"}\n"
|
|
||||||
"\n"
|
|
||||||
"QTabBar::tab:hover \n"
|
|
||||||
"{\n"
|
|
||||||
" color: rgb(166, 184, 200);\n"
|
|
||||||
" background: rgb(29, 29, 29);\n"
|
|
||||||
"}\n"
|
|
||||||
"\n"
|
|
||||||
"QTabBar\n"
|
|
||||||
"{\n"
|
|
||||||
"margin-top: 5px;\n"
|
|
||||||
"}\n"
|
|
||||||
"")
|
|
||||||
self.tabWidget.setDocumentMode(True)
|
self.tabWidget.setDocumentMode(True)
|
||||||
self.tabWidget.setTabsClosable(False)
|
self.tabWidget.setTabsClosable(False)
|
||||||
self.tabWidget.setMovable(True)
|
self.tabWidget.setMovable(True)
|
||||||
@@ -142,24 +40,7 @@ QScrollBar:vertical {
|
|||||||
self.loginlogout_button.setEnabled(True)
|
self.loginlogout_button.setEnabled(True)
|
||||||
self.loginlogout_button.setGeometry(QtCore.QRect(720, 10, 151, 50))
|
self.loginlogout_button.setGeometry(QtCore.QRect(720, 10, 151, 50))
|
||||||
self.loginlogout_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.loginlogout_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.loginlogout_button.setStyleSheet("QPushButton {\n"
|
self.loginlogout_button.setStyleSheet(styles.button)
|
||||||
" 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.loginlogout_button.setObjectName("loginlogout_button")
|
self.loginlogout_button.setObjectName("loginlogout_button")
|
||||||
self.username_box = QtWidgets.QLineEdit(self.account_tab)
|
self.username_box = QtWidgets.QLineEdit(self.account_tab)
|
||||||
self.username_box.setGeometry(QtCore.QRect(720, 70, 151, 31))
|
self.username_box.setGeometry(QtCore.QRect(720, 70, 151, 31))
|
||||||
@@ -187,70 +68,19 @@ QScrollBar:vertical {
|
|||||||
self.regmessage_button.setObjectName("regmessage_button")
|
self.regmessage_button.setObjectName("regmessage_button")
|
||||||
self.requestupdate_button = QtWidgets.QPushButton(self.account_tab)
|
self.requestupdate_button = QtWidgets.QPushButton(self.account_tab)
|
||||||
self.requestupdate_button.setGeometry(QtCore.QRect(225, 590, 200, 40))
|
self.requestupdate_button.setGeometry(QtCore.QRect(225, 590, 200, 40))
|
||||||
self.requestupdate_button.setStyleSheet("QPushButton {\n"
|
self.requestupdate_button.setStyleSheet(styles.button)
|
||||||
" 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.requestupdate_button.setText("Request selected package \nupdate on user side")
|
self.requestupdate_button.setText("Request selected package \nupdate on user side")
|
||||||
self.requestupdate_button.setObjectName("requestupdate_button")
|
self.requestupdate_button.setObjectName("requestupdate_button")
|
||||||
self.editowned_button = QtWidgets.QPushButton(self.account_tab)
|
self.editowned_button = QtWidgets.QPushButton(self.account_tab)
|
||||||
self.editowned_button.setGeometry(QtCore.QRect(445, 590, 200, 40))
|
self.editowned_button.setGeometry(QtCore.QRect(445, 590, 200, 40))
|
||||||
self.editowned_button.setStyleSheet("QPushButton {\n"
|
self.editowned_button.setStyleSheet(styles.button)
|
||||||
" 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.editowned_button.setText("Edit selected package")
|
self.editowned_button.setText("Edit selected package")
|
||||||
self.editowned_button.setObjectName("requestupdate_button")
|
self.editowned_button.setObjectName("requestupdate_button")
|
||||||
self.changeemail_button = QtWidgets.QPushButton(self.account_tab)
|
self.changeemail_button = QtWidgets.QPushButton(self.account_tab)
|
||||||
self.changeemail_button.setEnabled(True)
|
self.changeemail_button.setEnabled(True)
|
||||||
self.changeemail_button.setGeometry(QtCore.QRect(360, 20, 151, 50))
|
self.changeemail_button.setGeometry(QtCore.QRect(360, 20, 151, 50))
|
||||||
self.changeemail_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.changeemail_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.changeemail_button.setStyleSheet("QPushButton {\n"
|
self.changeemail_button.setStyleSheet(styles.button)
|
||||||
" 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.changeemail_button.setObjectName("changeemail_button")
|
self.changeemail_button.setObjectName("changeemail_button")
|
||||||
self.email_box = QtWidgets.QTextEdit(self.account_tab)
|
self.email_box = QtWidgets.QTextEdit(self.account_tab)
|
||||||
self.email_box.setEnabled(True)
|
self.email_box.setEnabled(True)
|
||||||
@@ -298,24 +128,7 @@ QScrollBar:vertical {
|
|||||||
self.changepass_button.setEnabled(True)
|
self.changepass_button.setEnabled(True)
|
||||||
self.changepass_button.setGeometry(QtCore.QRect(360, 140, 151, 50))
|
self.changepass_button.setGeometry(QtCore.QRect(360, 140, 151, 50))
|
||||||
self.changepass_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.changepass_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.changepass_button.setStyleSheet("QPushButton {\n"
|
self.changepass_button.setStyleSheet(styles.button)
|
||||||
" 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.changepass_button.setObjectName("changepass_button")
|
self.changepass_button.setObjectName("changepass_button")
|
||||||
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, 351))
|
self.manage_packages_table.setGeometry(QtCore.QRect(10, 240, 871, 351))
|
||||||
@@ -422,24 +235,7 @@ QScrollBar:vertical {
|
|||||||
self.upload_button.setEnabled(True)
|
self.upload_button.setEnabled(True)
|
||||||
self.upload_button.setGeometry(QtCore.QRect(10, 380, 291, 50))
|
self.upload_button.setGeometry(QtCore.QRect(10, 380, 291, 50))
|
||||||
self.upload_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.upload_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.upload_button.setStyleSheet("QPushButton {\n"
|
self.upload_button.setStyleSheet(styles.button)
|
||||||
" 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.upload_button.setObjectName("upload_button")
|
self.upload_button.setObjectName("upload_button")
|
||||||
self.safetywarning_message = QtWidgets.QTextBrowser(self.upload_tab)
|
self.safetywarning_message = QtWidgets.QTextBrowser(self.upload_tab)
|
||||||
self.safetywarning_message.setGeometry(QtCore.QRect(10, 450, 281, 161))
|
self.safetywarning_message.setGeometry(QtCore.QRect(10, 450, 281, 161))
|
||||||
@@ -502,139 +298,37 @@ QScrollBar:vertical {
|
|||||||
self.search_button.setEnabled(True)
|
self.search_button.setEnabled(True)
|
||||||
self.search_button.setGeometry(QtCore.QRect(750, 30, 91, 50))
|
self.search_button.setGeometry(QtCore.QRect(750, 30, 91, 50))
|
||||||
self.search_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.search_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.search_button.setStyleSheet("QPushButton {\n"
|
self.search_button.setStyleSheet(styles.button)
|
||||||
" 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.search_button.setObjectName("search_button")
|
self.search_button.setObjectName("search_button")
|
||||||
self.install_button = QtWidgets.QPushButton(self.browse_tab)
|
self.install_button = QtWidgets.QPushButton(self.browse_tab)
|
||||||
self.install_button.setEnabled(True)
|
self.install_button.setEnabled(True)
|
||||||
self.install_button.setGeometry(QtCore.QRect(20, 575, 146, 50))
|
self.install_button.setGeometry(QtCore.QRect(20, 575, 146, 50))
|
||||||
self.install_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.install_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.install_button.setStyleSheet("QPushButton {\n"
|
self.install_button.setStyleSheet(styles.button)
|
||||||
" 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.install_button.setObjectName("install_button")
|
self.install_button.setObjectName("install_button")
|
||||||
self.source_button = QtWidgets.QPushButton(self.browse_tab)
|
self.source_button = QtWidgets.QPushButton(self.browse_tab)
|
||||||
self.source_button.setEnabled(True)
|
self.source_button.setEnabled(True)
|
||||||
self.source_button.setGeometry(QtCore.QRect(190, 575, 146, 50))
|
self.source_button.setGeometry(QtCore.QRect(190, 575, 146, 50))
|
||||||
self.source_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.source_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.source_button.setStyleSheet("QPushButton {\n"
|
self.source_button.setStyleSheet(styles.button)
|
||||||
" 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.source_button.setObjectName("source_button")
|
self.source_button.setObjectName("source_button")
|
||||||
self.info_button = QtWidgets.QPushButton(self.browse_tab)
|
self.info_button = QtWidgets.QPushButton(self.browse_tab)
|
||||||
self.info_button.setEnabled(True)
|
self.info_button.setEnabled(True)
|
||||||
self.info_button.setGeometry(QtCore.QRect(360, 575, 146, 50))
|
self.info_button.setGeometry(QtCore.QRect(360, 575, 146, 50))
|
||||||
self.info_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.info_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.info_button.setStyleSheet("QPushButton {\n"
|
self.info_button.setStyleSheet(styles.button)
|
||||||
" 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.info_button.setObjectName("info_button")
|
self.info_button.setObjectName("info_button")
|
||||||
self.like_button = QtWidgets.QPushButton(self.browse_tab)
|
self.like_button = QtWidgets.QPushButton(self.browse_tab)
|
||||||
self.like_button.setEnabled(True)
|
self.like_button.setEnabled(True)
|
||||||
self.like_button.setGeometry(QtCore.QRect(540, 575, 146, 50))
|
self.like_button.setGeometry(QtCore.QRect(540, 575, 146, 50))
|
||||||
self.like_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.like_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.like_button.setStyleSheet("QPushButton {\n"
|
self.like_button.setStyleSheet(styles.button)
|
||||||
" 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.like_button.setObjectName("like_button")
|
self.like_button.setObjectName("like_button")
|
||||||
self.dislike_button = QtWidgets.QPushButton(self.browse_tab)
|
self.dislike_button = QtWidgets.QPushButton(self.browse_tab)
|
||||||
self.dislike_button.setEnabled(True)
|
self.dislike_button.setEnabled(True)
|
||||||
self.dislike_button.setGeometry(QtCore.QRect(710, 575, 146, 50))
|
self.dislike_button.setGeometry(QtCore.QRect(710, 575, 146, 50))
|
||||||
self.dislike_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.dislike_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.dislike_button.setStyleSheet("QPushButton {\n"
|
self.dislike_button.setStyleSheet(styles.button)
|
||||||
" 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.dislike_button.setObjectName("dislike_button")
|
self.dislike_button.setObjectName("dislike_button")
|
||||||
self.algolia_logo = QtWidgets.QLabel(self.browse_tab)
|
self.algolia_logo = QtWidgets.QLabel(self.browse_tab)
|
||||||
self.algolia_logo.setGeometry(QtCore.QRect(820, 530, 31, 31))
|
self.algolia_logo.setGeometry(QtCore.QRect(820, 530, 31, 31))
|
||||||
@@ -650,70 +344,19 @@ QScrollBar:vertical {
|
|||||||
self.delete_button.setEnabled(True)
|
self.delete_button.setEnabled(True)
|
||||||
self.delete_button.setGeometry(QtCore.QRect(300, 575, 275, 50))
|
self.delete_button.setGeometry(QtCore.QRect(300, 575, 275, 50))
|
||||||
self.delete_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.delete_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.delete_button.setStyleSheet("QPushButton {\n"
|
self.delete_button.setStyleSheet(styles.button)
|
||||||
" 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.delete_button.setObjectName("delete_button")
|
self.delete_button.setObjectName("delete_button")
|
||||||
self.update_button = QtWidgets.QPushButton(self.installed_tab)
|
self.update_button = QtWidgets.QPushButton(self.installed_tab)
|
||||||
self.update_button.setEnabled(True)
|
self.update_button.setEnabled(True)
|
||||||
self.update_button.setGeometry(QtCore.QRect(5, 575, 275, 50))
|
self.update_button.setGeometry(QtCore.QRect(5, 575, 275, 50))
|
||||||
self.update_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.update_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.update_button.setStyleSheet("QPushButton {\n"
|
self.update_button.setStyleSheet(styles.button)
|
||||||
" 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")
|
self.update_button.setObjectName("update_button")
|
||||||
self.check_updates_button = QtWidgets.QPushButton(self.installed_tab)
|
self.check_updates_button = QtWidgets.QPushButton(self.installed_tab)
|
||||||
self.check_updates_button.setEnabled(True)
|
self.check_updates_button.setEnabled(True)
|
||||||
self.check_updates_button.setGeometry(QtCore.QRect(595, 575, 275, 50))
|
self.check_updates_button.setGeometry(QtCore.QRect(595, 575, 275, 50))
|
||||||
self.check_updates_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.check_updates_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.check_updates_button.setStyleSheet("QPushButton {\n"
|
self.check_updates_button.setStyleSheet(styles.button)
|
||||||
" 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.check_updates_button.setObjectName("check_updates_button")
|
self.check_updates_button.setObjectName("check_updates_button")
|
||||||
self.installed_table = QtWidgets.QTableWidget(self.installed_tab)
|
self.installed_table = QtWidgets.QTableWidget(self.installed_tab)
|
||||||
self.installed_table.setGeometry(QtCore.QRect(0, 10, 871, 571))
|
self.installed_table.setGeometry(QtCore.QRect(0, 10, 871, 571))
|
||||||
@@ -867,24 +510,7 @@ class Ui_LoginWindow(object):
|
|||||||
self.login_button.setEnabled(True)
|
self.login_button.setEnabled(True)
|
||||||
self.login_button.setGeometry(QtCore.QRect(70, 140, 151, 50))
|
self.login_button.setGeometry(QtCore.QRect(70, 140, 151, 50))
|
||||||
self.login_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.login_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.login_button.setStyleSheet("QPushButton {\n"
|
self.login_button.setStyleSheet(styles.button)
|
||||||
" 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.login_button.setObjectName("login_button")
|
self.login_button.setObjectName("login_button")
|
||||||
self.email_box = QtWidgets.QLineEdit(self.centralwidget)
|
self.email_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||||
self.email_box.setGeometry(QtCore.QRect(20, 20, 251, 51))
|
self.email_box.setGeometry(QtCore.QRect(20, 20, 251, 51))
|
||||||
@@ -1022,24 +648,7 @@ class Ui_PackageWindow(object):
|
|||||||
self.update_button.setEnabled(True)
|
self.update_button.setEnabled(True)
|
||||||
self.update_button.setGeometry(QtCore.QRect(20, 360, 291, 50))
|
self.update_button.setGeometry(QtCore.QRect(20, 360, 291, 50))
|
||||||
self.update_button.setMinimumSize(QtCore.QSize(0, 50))
|
self.update_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||||
self.update_button.setStyleSheet("QPushButton {\n"
|
self.update_button.setStyleSheet(styles.button)
|
||||||
" 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")
|
self.update_button.setObjectName("update_button")
|
||||||
MainWindow.setCentralWidget(self.centralwidget)
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,11 @@ from PyQt5 import QtGui
|
|||||||
from urllib.parse import unquote
|
from urllib.parse import unquote
|
||||||
|
|
||||||
|
|
||||||
|
def log(message):
|
||||||
|
download_ui.logs_box.append(message)
|
||||||
|
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||||
|
|
||||||
|
|
||||||
def install(package):
|
def install(package):
|
||||||
r = request.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}")
|
r = request.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}")
|
||||||
r_code = handle(r.status_code)
|
r_code = handle(r.status_code)
|
||||||
@@ -25,7 +30,7 @@ def install(package):
|
|||||||
try:
|
try:
|
||||||
UiDownloadWindow.show()
|
UiDownloadWindow.show()
|
||||||
download_ui.logs_box.clear()
|
download_ui.logs_box.clear()
|
||||||
download_ui.logs_box.append(f"Downloading {unquote(r['url'].split('/')[-1])}")
|
log(f"Downloading {unquote(r['url'].split('/')[-1])}")
|
||||||
|
|
||||||
def install_this():
|
def install_this():
|
||||||
if not os.path.exists('{1}apps/{0}'.format(r['name'], horsy_vars.horsypath)):
|
if not os.path.exists('{1}apps/{0}'.format(r['name'], horsy_vars.horsypath)):
|
||||||
@@ -43,15 +48,13 @@ def install(package):
|
|||||||
if chunk:
|
if chunk:
|
||||||
percent += 1
|
percent += 1
|
||||||
f.write(chunk)
|
f.write(chunk)
|
||||||
download_ui.logs_box.append("")
|
log("")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
|
|
||||||
threads = list()
|
threads = list()
|
||||||
threads.append(threading.Thread(target=dl_main_file))
|
threads.append(threading.Thread(target=dl_main_file))
|
||||||
|
|
||||||
if r['download']:
|
if r['download']:
|
||||||
download_ui.logs_box.append(f"Downloading {unquote(r['download'].split('/')[-1])}")
|
log(f"Downloading {unquote(r['download'].split('/')[-1])}")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
|
|
||||||
def dl_dep_file():
|
def dl_dep_file():
|
||||||
global success
|
global success
|
||||||
@@ -62,9 +65,8 @@ def install(package):
|
|||||||
for chunk in file_r.iter_content(chunk_size=chunk_size):
|
for chunk in file_r.iter_content(chunk_size=chunk_size):
|
||||||
if chunk:
|
if chunk:
|
||||||
f.write(chunk)
|
f.write(chunk)
|
||||||
download_ui.logs_box.append("")
|
log("")
|
||||||
download_ui.logs_box.append(f"Starting virustotal scan for dependency")
|
log(f"Starting virustotal scan for dependency")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
|
|
||||||
threads.append(threading.Thread(target=dl_dep_file))
|
threads.append(threading.Thread(target=dl_dep_file))
|
||||||
|
|
||||||
@@ -77,82 +79,79 @@ def install(package):
|
|||||||
def unzip(file, where):
|
def unzip(file, where):
|
||||||
with zipfile.ZipFile(file, 'r') as zip_ref:
|
with zipfile.ZipFile(file, 'r') as zip_ref:
|
||||||
zip_ref.extractall(where)
|
zip_ref.extractall(where)
|
||||||
download_ui.logs_box.append(f"Extracted")
|
log(f"Extracted")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
|
|
||||||
if r['url'].split('.')[-1] == 'zip':
|
if r['url'].split('.')[-1] == 'zip':
|
||||||
download_ui.logs_box.append(f"Extracting {unquote(r['url'].split('/')[-1])}")
|
log(f"Extracting {unquote(r['url'].split('/')[-1])}")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
unzip('{2}apps/{0}/{1}'.format(r['name'], unquote(r['url'].split('/')[-1]), horsy_vars.horsypath),
|
unzip('{2}apps/{0}/{1}'.format(r['name'], unquote(r['url'].split('/')[-1]), horsy_vars.horsypath),
|
||||||
'{1}apps/{0}'.format(r['name'], horsy_vars.horsypath))
|
'{1}apps/{0}'.format(r['name'], horsy_vars.horsypath))
|
||||||
|
|
||||||
download_ui.logs_box.append("")
|
log("")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
|
|
||||||
if not get_key():
|
if not get_key():
|
||||||
download_ui.logs_box.append("Virustotal api key not found \n"
|
log("Virustotal api key not found \n"
|
||||||
"You can add it by entering horsy --vt [key] in terminal")
|
"You can add it by entering horsy --vt [key] in terminal")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
download_ui.logs_box.append("If you want to disable scan, type horsy --vt disable in terminal")
|
log("If you want to disable scan, type horsy --vt disable in terminal")
|
||||||
download_ui.logs_box.append("Starting virustotal scan for program")
|
log("Starting virustotal scan for program")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
scan_file('{2}apps/{0}/{1}'.format(r['name'], unquote(r['url'].split('/')[-1]),
|
scan_file('{2}apps/{0}/{1}'.format(r['name'], unquote(r['url'].split('/')[-1]),
|
||||||
horsy_vars.horsypath))
|
horsy_vars.horsypath))
|
||||||
analysis = get_report('{2}apps/{0}/{1}'.format(r['name'], unquote(r['url'].split('/')[-1]),
|
analysis = get_report('{2}apps/{0}/{1}'.format(r['name'], unquote(r['url'].split('/')[-1]),
|
||||||
horsy_vars.horsypath))
|
horsy_vars.horsypath))
|
||||||
download_ui.logs_box.append(f"Scan finished for program \nYou can see report for program by "
|
log(f"Scan finished for program \nYou can see report for program by "
|
||||||
f"opening: "
|
f"opening: "
|
||||||
f"{analysis['link']} \n"
|
f"{analysis['link']} \n"
|
||||||
f"{analysis['detect']['malicious']} antivirus flagged this file as "
|
f"{analysis['detect']['malicious']} antivirus flagged this file as "
|
||||||
f"malicious")
|
f"malicious")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if r['download']:
|
if r['download']:
|
||||||
try:
|
try:
|
||||||
download_ui.logs_box.append("")
|
log("")
|
||||||
download_ui.logs_box.append("Starting virustotal scan for dependency")
|
log("Starting virustotal scan for dependency")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
scan_file('{2}apps/{0}/{1}'.format(r['name'], unquote(r['download'].split('/')[-1]),
|
scan_file('{2}apps/{0}/{1}'.format(r['name'], unquote(r['download'].split('/')[-1]),
|
||||||
horsy_vars.horsypath))
|
horsy_vars.horsypath))
|
||||||
download_ui.logs_box.append(f"Scan finished for dependency")
|
log(f"Scan finished for dependency")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
analysis = get_report('{2}apps/{0}/{1}'.format(r['name'], unquote(r['download'].split('/')[-1]),
|
analysis = get_report('{2}apps/{0}/{1}'.format(r['name'], unquote(r['download'].split('/')[-1]),
|
||||||
horsy_vars.horsypath))
|
horsy_vars.horsypath))
|
||||||
download_ui.logs_box.append(f"You can see report for dependency by opening: {analysis['link']}")
|
log(f"You can see report for dependency by opening: {analysis['link']}")
|
||||||
download_ui.logs_box.append(f"{analysis['detect']['malicious']} "
|
log(f"{analysis['detect']['malicious']} "
|
||||||
f"antivirus flagged this file as malicious")
|
f"antivirus flagged this file as malicious")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
if analysis['detect']['malicious'] > 0:
|
if analysis['detect']['malicious'] > 0:
|
||||||
download_ui.logs_box.append("")
|
log("")
|
||||||
download_ui.logs_box.append(f"SECURITY WARNING, APP INSTALLATION STOPPED")
|
log(f"SECURITY WARNING, APP INSTALLATION STOPPED")
|
||||||
download_ui.logs_box.append(f"Dependency can be malicious. "
|
log(f"Dependency can be malicious. "
|
||||||
f"It may run now, if this added to installation config")
|
f"It may run now, if this added to installation config")
|
||||||
download_ui.logs_box.append(f"You can disable VT check with horsy --vt disable \n"
|
log(f"You can disable VT check with horsy --vt disable \n"
|
||||||
f"or use horsy CLI to force install")
|
f"or use horsy CLI to force install")
|
||||||
download_ui.logs_box.append("")
|
log("")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if r['url'].split('.')[-1] == 'zip':
|
if r['url'].split('.')[-1] == 'zip':
|
||||||
os.remove('{2}apps/{0}/{1}'.format(r['name'], r['url'].split('/')[-1], horsy_vars.horsypath))
|
os.remove('{2}apps/{0}/{1}'.format(r['name'], r['url'].split('/')[-1], horsy_vars.horsypath))
|
||||||
|
|
||||||
download_ui.logs_box.append("")
|
log("")
|
||||||
download_ui.logs_box.append("Generating launch script")
|
log("Generating launch script")
|
||||||
with open('{1}apps/{0}.bat'.format(r['name'], horsy_vars.horsypath), 'w') as f:
|
with open('{1}apps/{0}.bat'.format(r['name'], horsy_vars.horsypath), 'w') as f:
|
||||||
f.write(f"@ECHO off\n")
|
f.write(f"@ECHO off\n")
|
||||||
f.write(f"""{r['run'].replace('$appdir$', f'%horsypath%/apps/{r["name"]}')} %*\n""")
|
f.write(f"""{r['run'].replace('$appdir$', f'%horsypath%/apps/{r["name"]}')} %*\n""")
|
||||||
download_ui.logs_box.append("")
|
log("")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
|
|
||||||
if r['install']:
|
if r['install']:
|
||||||
download_ui.logs_box.append(f"Found install option, launching {r['install']}")
|
log(f"Found install option, launching {r['install']}")
|
||||||
download_ui.logs_box.append("")
|
log("")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
threading.Thread(target=os.system, args=('{2}apps/{0}/{1}'.format(r['name'], r['install'],
|
threading.Thread(target=os.system, args=('{2}apps/{0}/{1}'.format(r['name'], r['install'],
|
||||||
horsy_vars.horsypath),)).start()
|
horsy_vars.horsypath),)).start()
|
||||||
|
|
||||||
@@ -163,8 +162,7 @@ def install(package):
|
|||||||
versions[r['name']] = r['version']
|
versions[r['name']] = r['version']
|
||||||
f.write(json.dumps(versions))
|
f.write(json.dumps(versions))
|
||||||
|
|
||||||
download_ui.logs_box.append(f"All done!\nYou can run your app by entering {r['name']} in terminal")
|
log(f"All done!\nYou can run your app by entering {r['name']} in terminal")
|
||||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
|
||||||
|
|
||||||
threading.Thread(target=install_this).start()
|
threading.Thread(target=install_this).start()
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,11 @@ from ezzdl import dl
|
|||||||
|
|
||||||
|
|
||||||
def install(package):
|
def install(package):
|
||||||
|
"""
|
||||||
|
Install an app
|
||||||
|
:param package:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
r = request.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}")
|
r = request.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}")
|
||||||
r_code = handle(r.status_code)
|
r_code = handle(r.status_code)
|
||||||
r = r.text
|
r = r.text
|
||||||
@@ -99,6 +104,11 @@ def install(package):
|
|||||||
|
|
||||||
|
|
||||||
def uninstall(package):
|
def uninstall(package):
|
||||||
|
"""
|
||||||
|
Uninstall package
|
||||||
|
:param package:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
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[/]")
|
||||||
@@ -112,6 +122,11 @@ def uninstall(package):
|
|||||||
|
|
||||||
|
|
||||||
def apps_list(is_gui=False):
|
def apps_list(is_gui=False):
|
||||||
|
"""
|
||||||
|
List all installed apps
|
||||||
|
:param is_gui:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
apps = list()
|
apps = list()
|
||||||
if os.path.exists('{0}apps'.format(horsy_vars.horsypath)):
|
if os.path.exists('{0}apps'.format(horsy_vars.horsypath)):
|
||||||
if not is_gui:
|
if not is_gui:
|
||||||
|
|||||||
79
modules/styles.py
Normal file
79
modules/styles.py
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
centralwidget = """
|
||||||
|
QWidget {
|
||||||
|
background-color: rgb(30, 30, 30);
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollBar:vertical {
|
||||||
|
border: none;
|
||||||
|
background: rgb(30, 30, 30);
|
||||||
|
width: 10px;
|
||||||
|
margin: 15px 0 15px 0;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollBar::handle:vertical {
|
||||||
|
background-color: rgb(139, 139, 139);
|
||||||
|
min-height: 30px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollBar::handle:vertical:hover,
|
||||||
|
QScrollBar::handle:vertical:pressed {
|
||||||
|
background-color: rgb(149, 149, 149);
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollBar::sub-line:vertical,
|
||||||
|
QScrollBar::add-line:vertical,
|
||||||
|
QScrollBar::up-arrow:vertical,
|
||||||
|
QScrollBar::down-arrow:vertical {
|
||||||
|
height: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical,
|
||||||
|
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical{
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
tabwidget = """
|
||||||
|
QTabBar::tab {
|
||||||
|
background: rgb(22, 22, 22);
|
||||||
|
color: white;
|
||||||
|
font: 12pt \"MS Shell Dlg 2\";
|
||||||
|
width: 150px;
|
||||||
|
height: 21px;
|
||||||
|
padding: 13px;
|
||||||
|
}
|
||||||
|
QTabBar::tab:selected {
|
||||||
|
color: rgb(166, 184, 200);
|
||||||
|
background: rgb(45, 45, 45);
|
||||||
|
}
|
||||||
|
QTabBar::tab:hover {
|
||||||
|
color: rgb(166, 184, 200);
|
||||||
|
background: rgb(29, 29, 29);
|
||||||
|
}
|
||||||
|
QTabBar {
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
button = """
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
"""
|
||||||
Reference in New Issue
Block a user