Paul S
9cf4ca47a1
- Graphical installer based on Python3 with PySide2 GUI framework (Qt-bindings for Python)
268 lines
7.9 KiB
Python
268 lines
7.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
project: Backuppy
|
|
version: 1.01.000
|
|
file: backup.py
|
|
summary: main entry python file
|
|
"""
|
|
|
|
# Standard library imports
|
|
import os
|
|
|
|
# Third party imports
|
|
from PySide2 import QtCore
|
|
from PySide2 import QtGui
|
|
from PySide2 import QtCore, QtWidgets
|
|
|
|
# local imports
|
|
from languages import english
|
|
from languages import german
|
|
|
|
# local globals
|
|
VERSION: str = "1.01.000"
|
|
EMAIL: str = "fotocoder@joschu.ch"
|
|
LANG_EN: str = "English"
|
|
LANG_DE: str = "German"
|
|
LANGUAGE: str = LANG_EN
|
|
MYDIR: str = os.getcwd()
|
|
SOURCEDIR: str = None
|
|
EXCLUDE: bool = True
|
|
TARGETDIR: str = None
|
|
|
|
def get_lang_text(search_str: str):
|
|
return_str: str = eval("english." + search_str)
|
|
global LANGUAGE
|
|
if LANGUAGE == LANG_DE:
|
|
return_str = eval("german." + search_str)
|
|
return return_str
|
|
|
|
|
|
class BackuppyWizard(QtWidgets.QWizard):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
|
|
self.addPage(Page01(self))
|
|
self.addPage(Page02(self))
|
|
self.addPage(Page03(self))
|
|
self.addPage(Page04(self))
|
|
self.addPage(Page05(self))
|
|
self.addPage(Page06(self))
|
|
self.addPage(Page07(self))
|
|
self.addPage(Page08(self))
|
|
self.addPage(Page09(self))
|
|
self.addPage(Page10(self))
|
|
|
|
self.setWindowTitle(english.intromsg1)
|
|
self.resize(640, 480)
|
|
|
|
class Page01(QtWidgets.QWizardPage):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.label = QtWidgets.QLabel("Hello, first of all, which language do you prefer: English or German?")
|
|
# self.comboBox = QIComboBox(self)
|
|
self.comboBox = QtWidgets.QComboBox(self)
|
|
self.comboBox.addItem("English", LANG_DE)
|
|
self.comboBox.addItem("German", LANG_EN)
|
|
|
|
layout = QtWidgets.QVBoxLayout()
|
|
layout.addWidget(self.label)
|
|
layout.addWidget(self.comboBox)
|
|
self.setLayout(layout)
|
|
|
|
def validatePage(self):
|
|
global LANGUAGE
|
|
if self.comboBox.currentText() == LANG_DE:
|
|
LANGUAGE = LANG_DE
|
|
else:
|
|
LANGUAGE = LANG_EN
|
|
return True
|
|
|
|
|
|
class Page02(QtWidgets.QWizardPage):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.label1 = QtWidgets.QLabel()
|
|
self.label2 = QtWidgets.QLabel()
|
|
|
|
layout = QtWidgets.QVBoxLayout()
|
|
layout.addWidget(self.label1)
|
|
layout.addWidget(self.label2)
|
|
self.setLayout(layout)
|
|
|
|
def initializePage(self):
|
|
self.label1.setText(get_lang_text("languagepack"))
|
|
self.label2.setText(get_lang_text("intromsg2"))
|
|
|
|
|
|
class Page03(QtWidgets.QWizardPage):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.label = QtWidgets.QLabel()
|
|
self.groupbox = QtWidgets.QGroupBox()
|
|
self.groupbox.setFlat(True)
|
|
self.radio1 = QtWidgets.QRadioButton()
|
|
self.radio2 = QtWidgets.QRadioButton()
|
|
|
|
vbox = QtWidgets.QVBoxLayout()
|
|
vbox.addWidget(self.radio1)
|
|
vbox.addWidget(self.radio2)
|
|
vbox.addStretch(1)
|
|
self.groupbox.setLayout(vbox)
|
|
|
|
layout = QtWidgets.QVBoxLayout()
|
|
layout.addWidget(self.label)
|
|
layout.addWidget(self.groupbox)
|
|
self.setLayout(layout)
|
|
|
|
def initializePage(self):
|
|
self.label.setText(get_lang_text("excludefile1"))
|
|
self.radio1.setText(get_lang_text("Yes"))
|
|
self.radio2.setText(get_lang_text("No"))
|
|
self.radio1.setChecked(True)
|
|
|
|
def validatePage(self):
|
|
global EXCLUDE
|
|
if self.radio1.isChecked():
|
|
EXCLUDE = True
|
|
else:
|
|
EXCLUDE = False
|
|
return True
|
|
|
|
class Page04(QtWidgets.QWizardPage):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.label = QtWidgets.QLabel()
|
|
layout = QtWidgets.QVBoxLayout()
|
|
layout.addWidget(self.label)
|
|
self.setLayout(layout)
|
|
|
|
def initializePage(self):
|
|
global EXCLUDE
|
|
if EXCLUDE:
|
|
self.label.setText(get_lang_text("excludefile2"))
|
|
else:
|
|
self.label.setText(get_lang_text("excludefile3"))
|
|
|
|
class Page05(QtWidgets.QWizardPage):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.label1 = QtWidgets.QLabel()
|
|
self.label2 = QtWidgets.QLabel()
|
|
self.edit = QtWidgets.QLineEdit()
|
|
layout = QtWidgets.QVBoxLayout()
|
|
layout.addWidget(self.label1)
|
|
layout.addWidget(self.label2)
|
|
layout.addWidget(self.edit)
|
|
self.setLayout(layout)
|
|
|
|
def initializePage(self):
|
|
self.label1.setText(get_lang_text("srcdir1"))
|
|
self.label2.setText(get_lang_text("srcdir2"))
|
|
|
|
def validatePage(self):
|
|
global SOURCEDIR
|
|
SOURCEDIR = self.edit.text()
|
|
|
|
return True
|
|
|
|
|
|
class Page06(QtWidgets.QWizardPage):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.label1 = QtWidgets.QLabel()
|
|
self.label2 = QtWidgets.QLabel()
|
|
self.label3 = QtWidgets.QLabel()
|
|
layout = QtWidgets.QVBoxLayout()
|
|
layout.addWidget(self.label1)
|
|
layout.addWidget(self.label2)
|
|
layout.addWidget(self.label3)
|
|
self.setLayout(layout)
|
|
|
|
def initializePage(self):
|
|
self.label1.setText(get_lang_text("srcdir3_1"))
|
|
self.label2.setText(SOURCEDIR)
|
|
self.label3.setText(get_lang_text("srcdir3_2"))
|
|
|
|
|
|
class Page07(QtWidgets.QWizardPage):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.label1 = QtWidgets.QLabel()
|
|
self.edit = QtWidgets.QLineEdit()
|
|
layout = QtWidgets.QVBoxLayout()
|
|
layout.addWidget(self.label1)
|
|
layout.addWidget(self.edit)
|
|
self.setLayout(layout)
|
|
|
|
def initializePage(self):
|
|
self.label1.setText(get_lang_text("targetdir1"))
|
|
|
|
def validatePage(self):
|
|
global TARGETDIR
|
|
TARGETDIR = self.edit.text()
|
|
|
|
return True
|
|
|
|
|
|
class Page08(QtWidgets.QWizardPage):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.label1 = QtWidgets.QLabel()
|
|
self.label2 = QtWidgets.QLabel()
|
|
self.label3 = QtWidgets.QLabel()
|
|
layout = QtWidgets.QVBoxLayout()
|
|
layout.addWidget(self.label1)
|
|
layout.addWidget(self.label2)
|
|
layout.addWidget(self.label3)
|
|
self.setLayout(layout)
|
|
|
|
def initializePage(self):
|
|
self.label1.setText(get_lang_text("targetdir2_1"))
|
|
self.label2.setText(TARGETDIR)
|
|
self.label3.setText(get_lang_text("targetdir2_2"))
|
|
|
|
|
|
class Page09(QtWidgets.QWizardPage):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.label1 = QtWidgets.QLabel()
|
|
self.label2 = QtWidgets.QLabel()
|
|
layout = QtWidgets.QVBoxLayout()
|
|
layout.addWidget(self.label1)
|
|
layout.addWidget(self.label2)
|
|
self.setLayout(layout)
|
|
|
|
def initializePage(self):
|
|
self.label1.setText(get_lang_text("collect"))
|
|
global SOURCEDIR, TARGETDIR
|
|
self.label2.setText(f"rsync -aqp --exclude-from={MYDIR}/exclude.txt {SOURCEDIR} {TARGETDIR}")
|
|
|
|
|
|
class Page10(QtWidgets.QWizardPage):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.label1 = QtWidgets.QLabel()
|
|
self.label2 = QtWidgets.QLabel()
|
|
self.label3 = QtWidgets.QLabel()
|
|
layout = QtWidgets.QVBoxLayout()
|
|
layout.addWidget(self.label1)
|
|
layout.addWidget(self.label2)
|
|
layout.addWidget(self.label3)
|
|
self.setLayout(layout)
|
|
self.setFinalPage(True)
|
|
|
|
def initializePage(self):
|
|
self.label1.setText(get_lang_text("outro1"))
|
|
self.label2.setText(get_lang_text("outro2"))
|
|
urlLink = "<a href='mailto: " + EMAIL + "'>fotocoder@joschu.ch</a>"
|
|
self.label3.setText(urlLink)
|
|
self.label3.setOpenExternalLinks(True)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
print(f"Starting backup.py v{VERSION}")
|
|
app = QtWidgets.QApplication()
|
|
wizard = BackuppyWizard()
|
|
wizard.show()
|
|
app.exec_()
|
|
print("Ending backup.py")
|