Skip to content
Snippets Groups Projects
Commit 25bcbda7 authored by christian's avatar christian
Browse files

added linuxparty.py

parent 98af3519
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/python3
#this is treeview branch
import sys, os, io, subprocess
import json
from PyQt5 import QtWidgets, QtGui, QtCore
from collections import OrderedDict
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(700, 500)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.treeView = QtWidgets.QTreeView(self.centralwidget)
self.treeView.setGeometry(QtCore.QRect(10, 10, 781, 521))
self.treeView.header().setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
self.treeView.setHeaderHidden(True)
self.gridLayout.addWidget(self.treeView, 0, 0, 1, 4)
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar.hide()
self.progressBar.setProperty("value", 0)
self.progressBar.setObjectName("progressBar")
self.gridLayout.addWidget(self.progressBar, 2, 0, 1, 1)
self.btnr = QtWidgets.QPushButton(self.centralwidget)
self.btnr.setObjectName("btnr")
self.gridLayout.addWidget(self.btnr, 2, 2, 1, 1)
self.btnl = QtWidgets.QPushButton(self.centralwidget)
self.btnl.setObjectName("btnl")
self.gridLayout.addWidget(self.btnl, 2, 1, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 600, 22))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
self.menuAbout = QtWidgets.QMenu(self.menubar)
self.menuAbout.setObjectName("menuAbout")
MainWindow.setMenuBar(self.menubar)
self.actionQuit = QtWidgets.QAction(MainWindow)
self.actionQuit.setObjectName("actionQuit")
self.actionInfo = QtWidgets.QAction(MainWindow)
self.actionInfo.setObjectName("actionInfo")
self.menuAbout.addAction(self.actionInfo)
self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menuAbout.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.btnr.setText(_translate("MainWindow", "&Quit"))
self.btnl.setText(_translate("MainWindow", "&Install"))
self.menuFile.setTitle(_translate("MainWindow", "&File"))
self.menuAbout.setTitle(_translate("MainWindow", "&About"))
self.actionQuit.setText(_translate("MainWindow", "&Quit"))
self.actionInfo.setText(_translate("MainWindow", "&Info"))
class Main(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
extractAction = QtWidgets.QAction("&Quit", self)
extractAction.setShortcut("Ctrl+Q")
extractAction.setStatusTip('Leave the Application')
extractAction.triggered.connect(self.close_application)
self.ui.menuFile.addAction(extractAction)
self.ui.btnr.clicked.connect(self.close_application)
def close_application(self):
choice = QtWidgets.QMessageBox.question(self, 'Close the Application?', "No Packages will be installed.", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
if choice == QtWidgets.QMessageBox.Yes:
QtCore.QCoreApplication.instance().quit()
else:
pass
def installProcess():
window.ui.btnl.hide()
window.ui.btnr.setText("&Finish")
window.ui.progressBar.show()
window.ui.progressBar.setRange(0,0)
pkglist = getPackagelistTree()
print(pkglist)
#installPackages()
window.ui.progressBar.setRange(0,1)
window.ui.progressBar.setValue(1)
makeDocu(pkglist)
showSuccBox()
def showSuccBox():
succBox = QtWidgets.QMessageBox()
succBox.setText("The selected packages have been installed.")
succBox.setWindowTitle("Installation Finished!")
succBox.setIcon(1)
sys.exit(succBox.exec_())
def showErrorBox():
errorBox = QtWidgets.QMessageBox()
errorBox.setText("Something went wrong. No packages have been installed.")
errorBox.setWindowTitle("Error")
errorBox.setIcon(3)
sys.exit(errorBox.exec_())
def showErrorBox(errorstring):
errorBox = QtWidgets.QMessageBox()
errorBox.setText(errorstring)
errorBox.setWindowTitle("Error")
errorBox.setIcon(3)
sys.exit(errorBox.exec_())
def checkIfRoot():
# disabled for testing
#if os.getuid() != 0:
if 0 != 0:
errorBox = QtWidgets.QMessageBox()
errorBox.setText("You must run this script as root.")
errorBox.setWindowTitle("Please run this script as root.")
errorBox.setIcon(3)
sys.exit(errorBox.exec_())
else:
pass
def installPackages():
command=["echo", "apt-get", "install","--quiet", "-y", "--force-yes"]
#command=["apt-get", "install","--quiet", "-y", "--force-yes"]
subprocess.check_call(command+pkglist, shell=False)
def mountStick():
command=[basepath+"infuse_offline_repo.sh"]
try:
subprocess.run(command, shell=False)
except:
showErrorBox("subprocess infuse_offlinerepo.sh failed.")
def makeDocu():
command=["echo", "./makeDoku.sh", os.path.dirname(basepath), " ".join(pkglist)]
#command=["./makeDoku.sh", os.path.dirname(basepath), " ".join(pkglist)]
try:
subprocess.run(command, shell=False)
except:
showErrorBox("Subprocess makeDocu.sh failed")
def getPackagelist():
installList = []
model = window.ui.tableView.model()
i = 0
while i < model.rowCount():
item = model.item(i)
if item.isEnabled:
if item.checkState():
installList.append(item.text())
i += 1
return installList
def getPackagelistTree():
installList = []
model = window.ui.treeView.model()
i = 0
while i < model.rowCount():
branch = model.item(i)
j = 0
#if branch.isEnabled():
#check if branc is checkt if true return all children true
# if branch.checkState():
# while j < branch.rowCount():
# installList.append(branch.child(j).text())
# j += 1
# else:
while j < branch.rowCount():
if branch.child(j).isEnabled:
if branch.child(j).checkState():
installList.append(branch.child(j).text())
j += 1
i += 1
return installList
def fillTreeView(inputDataJson, treeView):
model = QtGui.QStandardItemModel()
branchfont = QtGui.QFont()
branchfont.setBold(True)
for softwareGroup in inputDataJson:
branch = QtGui.QStandardItem(softwareGroup)
#branch.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
#branch.setData(QtCore.QVariant(QtCore.Qt.Checked), QtCore.Qt.CheckStateRole)
branch.setFont(branchfont)
if 'groupDesc' in inputDataJson[softwareGroup]:
branchDesc = QtGui.QStandardItem(inputDataJson[softwareGroup]['groupDesc'])
else:
branchDesc = QtGui.QStandardItem('')
for package in inputDataJson[softwareGroup]['packages']:
if not ('hidden' in package and package['hidden']):
item = QtGui.QStandardItem(package['pkgname'])
item.setText(package['pkgname'])
item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
if package['tagged']:
item.setData(QtCore.QVariant(QtCore.Qt.Checked), QtCore.Qt.CheckStateRole)
else:
item.setData(QtCore.QVariant(QtCore.Qt.Unchecked), QtCore.Qt.CheckStateRole)
item2 = QtGui.QStandardItem(package['pkgdescription'])
branch.appendRow([item, item2])
model.appendRow([branch, branchDesc])
treeView.setModel(model)
treeView.expandAll()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
basepath=os.path.realpath(__file__)
checkIfRoot()
#mountStick()
window = Main()
window.setWindowTitle("Linux Install Party Software Installer")
with open('./offline_repo.json', 'r') as inputfile:
#with open('./test.json', 'r') as inputfile:
data=json.loads(inputfile.read(), object_pairs_hook=OrderedDict)
fillTreeView(data, window.ui.treeView)
window.ui.btnl.clicked.connect(installProcess)
window.show()
sys.exit(app.exec_())
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment