Updated scrollbars and added comments
This commit is contained in:
431
modules/gui.py
431
modules/gui.py
@@ -1,5 +1,6 @@
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
import modules.images # import images from binaries
|
||||
import modules.styles as styles
|
||||
import ctypes
|
||||
|
||||
|
||||
@@ -14,84 +15,7 @@ class Ui_MainWindow(object):
|
||||
MainWindow.setWindowIcon(icon)
|
||||
MainWindow.setWindowOpacity(0.99)
|
||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||
self.centralwidget.setStyleSheet("""QWidget{\n"
|
||||
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.setStyleSheet(styles.centralwidget)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.horsy_logo_lefttop = QtWidgets.QLabel(self.centralwidget)
|
||||
self.horsy_logo_lefttop.setGeometry(QtCore.QRect(10, 10, 32, 32))
|
||||
@@ -104,33 +28,7 @@ QScrollBar:vertical {
|
||||
self.tabWidget.setToolTip("")
|
||||
self.tabWidget.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
self.tabWidget.setAutoFillBackground(False)
|
||||
self.tabWidget.setStyleSheet("QTabBar::tab\n"
|
||||
"{\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.setStyleSheet(styles.tabwidget)
|
||||
self.tabWidget.setDocumentMode(True)
|
||||
self.tabWidget.setTabsClosable(False)
|
||||
self.tabWidget.setMovable(True)
|
||||
@@ -142,24 +40,7 @@ QScrollBar:vertical {
|
||||
self.loginlogout_button.setEnabled(True)
|
||||
self.loginlogout_button.setGeometry(QtCore.QRect(720, 10, 151, 50))
|
||||
self.loginlogout_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.loginlogout_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.loginlogout_button.setStyleSheet(styles.button)
|
||||
self.loginlogout_button.setObjectName("loginlogout_button")
|
||||
self.username_box = QtWidgets.QLineEdit(self.account_tab)
|
||||
self.username_box.setGeometry(QtCore.QRect(720, 70, 151, 31))
|
||||
@@ -187,70 +68,19 @@ QScrollBar:vertical {
|
||||
self.regmessage_button.setObjectName("regmessage_button")
|
||||
self.requestupdate_button = QtWidgets.QPushButton(self.account_tab)
|
||||
self.requestupdate_button.setGeometry(QtCore.QRect(225, 590, 200, 40))
|
||||
self.requestupdate_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.requestupdate_button.setStyleSheet(styles.button)
|
||||
self.requestupdate_button.setText("Request selected package \nupdate on user side")
|
||||
self.requestupdate_button.setObjectName("requestupdate_button")
|
||||
self.editowned_button = QtWidgets.QPushButton(self.account_tab)
|
||||
self.editowned_button.setGeometry(QtCore.QRect(445, 590, 200, 40))
|
||||
self.editowned_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.editowned_button.setStyleSheet(styles.button)
|
||||
self.editowned_button.setText("Edit selected package")
|
||||
self.editowned_button.setObjectName("requestupdate_button")
|
||||
self.changeemail_button = QtWidgets.QPushButton(self.account_tab)
|
||||
self.changeemail_button.setEnabled(True)
|
||||
self.changeemail_button.setGeometry(QtCore.QRect(360, 20, 151, 50))
|
||||
self.changeemail_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.changeemail_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.changeemail_button.setStyleSheet(styles.button)
|
||||
self.changeemail_button.setObjectName("changeemail_button")
|
||||
self.email_box = QtWidgets.QTextEdit(self.account_tab)
|
||||
self.email_box.setEnabled(True)
|
||||
@@ -298,24 +128,7 @@ QScrollBar:vertical {
|
||||
self.changepass_button.setEnabled(True)
|
||||
self.changepass_button.setGeometry(QtCore.QRect(360, 140, 151, 50))
|
||||
self.changepass_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.changepass_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.changepass_button.setStyleSheet(styles.button)
|
||||
self.changepass_button.setObjectName("changepass_button")
|
||||
self.manage_packages_table = QtWidgets.QTableWidget(self.account_tab)
|
||||
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.setGeometry(QtCore.QRect(10, 380, 291, 50))
|
||||
self.upload_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.upload_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.upload_button.setStyleSheet(styles.button)
|
||||
self.upload_button.setObjectName("upload_button")
|
||||
self.safetywarning_message = QtWidgets.QTextBrowser(self.upload_tab)
|
||||
self.safetywarning_message.setGeometry(QtCore.QRect(10, 450, 281, 161))
|
||||
@@ -502,139 +298,37 @@ QScrollBar:vertical {
|
||||
self.search_button.setEnabled(True)
|
||||
self.search_button.setGeometry(QtCore.QRect(750, 30, 91, 50))
|
||||
self.search_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.search_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.search_button.setStyleSheet(styles.button)
|
||||
self.search_button.setObjectName("search_button")
|
||||
self.install_button = QtWidgets.QPushButton(self.browse_tab)
|
||||
self.install_button.setEnabled(True)
|
||||
self.install_button.setGeometry(QtCore.QRect(20, 575, 146, 50))
|
||||
self.install_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.install_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.install_button.setStyleSheet(styles.button)
|
||||
self.install_button.setObjectName("install_button")
|
||||
self.source_button = QtWidgets.QPushButton(self.browse_tab)
|
||||
self.source_button.setEnabled(True)
|
||||
self.source_button.setGeometry(QtCore.QRect(190, 575, 146, 50))
|
||||
self.source_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.source_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.source_button.setStyleSheet(styles.button)
|
||||
self.source_button.setObjectName("source_button")
|
||||
self.info_button = QtWidgets.QPushButton(self.browse_tab)
|
||||
self.info_button.setEnabled(True)
|
||||
self.info_button.setGeometry(QtCore.QRect(360, 575, 146, 50))
|
||||
self.info_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.info_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.info_button.setStyleSheet(styles.button)
|
||||
self.info_button.setObjectName("info_button")
|
||||
self.like_button = QtWidgets.QPushButton(self.browse_tab)
|
||||
self.like_button.setEnabled(True)
|
||||
self.like_button.setGeometry(QtCore.QRect(540, 575, 146, 50))
|
||||
self.like_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.like_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.like_button.setStyleSheet(styles.button)
|
||||
self.like_button.setObjectName("like_button")
|
||||
self.dislike_button = QtWidgets.QPushButton(self.browse_tab)
|
||||
self.dislike_button.setEnabled(True)
|
||||
self.dislike_button.setGeometry(QtCore.QRect(710, 575, 146, 50))
|
||||
self.dislike_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.dislike_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.dislike_button.setStyleSheet(styles.button)
|
||||
self.dislike_button.setObjectName("dislike_button")
|
||||
self.algolia_logo = QtWidgets.QLabel(self.browse_tab)
|
||||
self.algolia_logo.setGeometry(QtCore.QRect(820, 530, 31, 31))
|
||||
@@ -650,70 +344,19 @@ QScrollBar:vertical {
|
||||
self.delete_button.setEnabled(True)
|
||||
self.delete_button.setGeometry(QtCore.QRect(300, 575, 275, 50))
|
||||
self.delete_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.delete_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.delete_button.setStyleSheet(styles.button)
|
||||
self.delete_button.setObjectName("delete_button")
|
||||
self.update_button = QtWidgets.QPushButton(self.installed_tab)
|
||||
self.update_button.setEnabled(True)
|
||||
self.update_button.setGeometry(QtCore.QRect(5, 575, 275, 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.setStyleSheet(styles.button)
|
||||
self.update_button.setObjectName("update_button")
|
||||
self.check_updates_button = QtWidgets.QPushButton(self.installed_tab)
|
||||
self.check_updates_button.setEnabled(True)
|
||||
self.check_updates_button.setGeometry(QtCore.QRect(595, 575, 275, 50))
|
||||
self.check_updates_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.check_updates_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.check_updates_button.setStyleSheet(styles.button)
|
||||
self.check_updates_button.setObjectName("check_updates_button")
|
||||
self.installed_table = QtWidgets.QTableWidget(self.installed_tab)
|
||||
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.setGeometry(QtCore.QRect(70, 140, 151, 50))
|
||||
self.login_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.login_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.login_button.setStyleSheet(styles.button)
|
||||
self.login_button.setObjectName("login_button")
|
||||
self.email_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
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.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.setStyleSheet(styles.button)
|
||||
self.update_button.setObjectName("update_button")
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
|
||||
|
||||
@@ -13,6 +13,11 @@ from PyQt5 import QtGui
|
||||
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):
|
||||
r = request.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}")
|
||||
r_code = handle(r.status_code)
|
||||
@@ -25,7 +30,7 @@ def install(package):
|
||||
try:
|
||||
UiDownloadWindow.show()
|
||||
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():
|
||||
if not os.path.exists('{1}apps/{0}'.format(r['name'], horsy_vars.horsypath)):
|
||||
@@ -43,15 +48,13 @@ def install(package):
|
||||
if chunk:
|
||||
percent += 1
|
||||
f.write(chunk)
|
||||
download_ui.logs_box.append("")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log("")
|
||||
|
||||
threads = list()
|
||||
threads.append(threading.Thread(target=dl_main_file))
|
||||
|
||||
if r['download']:
|
||||
download_ui.logs_box.append(f"Downloading {unquote(r['download'].split('/')[-1])}")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log(f"Downloading {unquote(r['download'].split('/')[-1])}")
|
||||
|
||||
def dl_dep_file():
|
||||
global success
|
||||
@@ -62,9 +65,8 @@ def install(package):
|
||||
for chunk in file_r.iter_content(chunk_size=chunk_size):
|
||||
if chunk:
|
||||
f.write(chunk)
|
||||
download_ui.logs_box.append("")
|
||||
download_ui.logs_box.append(f"Starting virustotal scan for dependency")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log("")
|
||||
log(f"Starting virustotal scan for dependency")
|
||||
|
||||
threads.append(threading.Thread(target=dl_dep_file))
|
||||
|
||||
@@ -77,82 +79,79 @@ def install(package):
|
||||
def unzip(file, where):
|
||||
with zipfile.ZipFile(file, 'r') as zip_ref:
|
||||
zip_ref.extractall(where)
|
||||
download_ui.logs_box.append(f"Extracted")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log(f"Extracted")
|
||||
|
||||
if r['url'].split('.')[-1] == 'zip':
|
||||
download_ui.logs_box.append(f"Extracting {unquote(r['url'].split('/')[-1])}")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log(f"Extracting {unquote(r['url'].split('/')[-1])}")
|
||||
|
||||
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))
|
||||
|
||||
download_ui.logs_box.append("")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log("")
|
||||
|
||||
if not get_key():
|
||||
download_ui.logs_box.append("Virustotal api key not found \n"
|
||||
"You can add it by entering horsy --vt [key] in terminal")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log("Virustotal api key not found \n"
|
||||
"You can add it by entering horsy --vt [key] in terminal")
|
||||
|
||||
else:
|
||||
try:
|
||||
download_ui.logs_box.append("If you want to disable scan, type horsy --vt disable in terminal")
|
||||
download_ui.logs_box.append("Starting virustotal scan for program")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log("If you want to disable scan, type horsy --vt disable in terminal")
|
||||
log("Starting virustotal scan for program")
|
||||
|
||||
scan_file('{2}apps/{0}/{1}'.format(r['name'], unquote(r['url'].split('/')[-1]),
|
||||
horsy_vars.horsypath))
|
||||
analysis = get_report('{2}apps/{0}/{1}'.format(r['name'], unquote(r['url'].split('/')[-1]),
|
||||
horsy_vars.horsypath))
|
||||
download_ui.logs_box.append(f"Scan finished for program \nYou can see report for program by "
|
||||
f"opening: "
|
||||
f"{analysis['link']} \n"
|
||||
f"{analysis['detect']['malicious']} antivirus flagged this file as "
|
||||
f"malicious")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log(f"Scan finished for program \nYou can see report for program by "
|
||||
f"opening: "
|
||||
f"{analysis['link']} \n"
|
||||
f"{analysis['detect']['malicious']} antivirus flagged this file as "
|
||||
f"malicious")
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
if r['download']:
|
||||
try:
|
||||
download_ui.logs_box.append("")
|
||||
download_ui.logs_box.append("Starting virustotal scan for dependency")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log("")
|
||||
log("Starting virustotal scan for dependency")
|
||||
|
||||
scan_file('{2}apps/{0}/{1}'.format(r['name'], unquote(r['download'].split('/')[-1]),
|
||||
horsy_vars.horsypath))
|
||||
download_ui.logs_box.append(f"Scan finished for dependency")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log(f"Scan finished for dependency")
|
||||
|
||||
analysis = get_report('{2}apps/{0}/{1}'.format(r['name'], unquote(r['download'].split('/')[-1]),
|
||||
horsy_vars.horsypath))
|
||||
download_ui.logs_box.append(f"You can see report for dependency by opening: {analysis['link']}")
|
||||
download_ui.logs_box.append(f"{analysis['detect']['malicious']} "
|
||||
f"antivirus flagged this file as malicious")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log(f"You can see report for dependency by opening: {analysis['link']}")
|
||||
log(f"{analysis['detect']['malicious']} "
|
||||
f"antivirus flagged this file as malicious")
|
||||
|
||||
if analysis['detect']['malicious'] > 0:
|
||||
download_ui.logs_box.append("")
|
||||
download_ui.logs_box.append(f"SECURITY WARNING, APP INSTALLATION STOPPED")
|
||||
download_ui.logs_box.append(f"Dependency can be malicious. "
|
||||
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"
|
||||
f"or use horsy CLI to force install")
|
||||
download_ui.logs_box.append("")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log("")
|
||||
log(f"SECURITY WARNING, APP INSTALLATION STOPPED")
|
||||
log(f"Dependency can be malicious. "
|
||||
f"It may run now, if this added to installation config")
|
||||
log(f"You can disable VT check with horsy --vt disable \n"
|
||||
f"or use horsy CLI to force install")
|
||||
log("")
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
if r['url'].split('.')[-1] == 'zip':
|
||||
os.remove('{2}apps/{0}/{1}'.format(r['name'], r['url'].split('/')[-1], horsy_vars.horsypath))
|
||||
|
||||
download_ui.logs_box.append("")
|
||||
download_ui.logs_box.append("Generating launch script")
|
||||
log("")
|
||||
log("Generating launch script")
|
||||
with open('{1}apps/{0}.bat'.format(r['name'], horsy_vars.horsypath), 'w') as f:
|
||||
f.write(f"@ECHO off\n")
|
||||
f.write(f"""{r['run'].replace('$appdir$', f'%horsypath%/apps/{r["name"]}')} %*\n""")
|
||||
download_ui.logs_box.append("")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log("")
|
||||
|
||||
if r['install']:
|
||||
download_ui.logs_box.append(f"Found install option, launching {r['install']}")
|
||||
download_ui.logs_box.append("")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log(f"Found install option, launching {r['install']}")
|
||||
log("")
|
||||
|
||||
threading.Thread(target=os.system, args=('{2}apps/{0}/{1}'.format(r['name'], r['install'],
|
||||
horsy_vars.horsypath),)).start()
|
||||
|
||||
@@ -163,8 +162,7 @@ def install(package):
|
||||
versions[r['name']] = r['version']
|
||||
f.write(json.dumps(versions))
|
||||
|
||||
download_ui.logs_box.append(f"All done!\nYou can run your app by entering {r['name']} in terminal")
|
||||
download_ui.logs_box.moveCursor(QtGui.QTextCursor.End)
|
||||
log(f"All done!\nYou can run your app by entering {r['name']} in terminal")
|
||||
|
||||
threading.Thread(target=install_this).start()
|
||||
|
||||
|
||||
@@ -11,6 +11,11 @@ from ezzdl import dl
|
||||
|
||||
|
||||
def install(package):
|
||||
"""
|
||||
Install an app
|
||||
:param package:
|
||||
:return:
|
||||
"""
|
||||
r = request.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}")
|
||||
r_code = handle(r.status_code)
|
||||
r = r.text
|
||||
@@ -99,6 +104,11 @@ def install(package):
|
||||
|
||||
|
||||
def uninstall(package):
|
||||
"""
|
||||
Uninstall package
|
||||
:param package:
|
||||
:return:
|
||||
"""
|
||||
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[/]")
|
||||
@@ -112,6 +122,11 @@ def uninstall(package):
|
||||
|
||||
|
||||
def apps_list(is_gui=False):
|
||||
"""
|
||||
List all installed apps
|
||||
:param is_gui:
|
||||
:return:
|
||||
"""
|
||||
apps = list()
|
||||
if os.path.exists('{0}apps'.format(horsy_vars.horsypath)):
|
||||
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