From b27f288965ad56e4a1e6f99e6205cd540d1e8f86 Mon Sep 17 00:00:00 2001 From: Andreas Zweili Date: Sat, 2 Mar 2019 11:51:03 +0100 Subject: [PATCH] extend the Borg Interface section --- projektdokumentation/projektdokumentation.org | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/projektdokumentation/projektdokumentation.org b/projektdokumentation/projektdokumentation.org index 9327a17..c5d888e 100644 --- a/projektdokumentation/projektdokumentation.org +++ b/projektdokumentation/projektdokumentation.org @@ -1957,15 +1957,26 @@ self.config['borgqt']['includes'] = json.dumps(includes, ** Borg Interface -Für die jeweiligen Funktionen von gls:borg wurde eine Hauptklasse -~BorgQtThread~ erstellt um soviel Code wie möglich zwischen den einzelnen -Funktionen wiederverwendne zu können. Jede Funktion vererbt die Klasse dann und -adaptiert sie soweit als nötig. +Zuerst erschien es sinnvoll die Kommunikation zwischen gls:borg und Borg-Qt +über einfache Funktionen laufen zu lassen. Dieser Ansatz hatte allerdings zwei +Probleme. Zum Einen wurde es relativ umständlich Informationen zu verarbeiten +und weiterzugeben zum anderen führte es zu dem unschönen Nebeneffekt dass, das +gls:ui eingefroren ist. Threads sollten hier abhilfe schaffen. + +Python würde hierzu ein Modul, ~threading.Thread~ footcite:threading, +mitliefern. Allerdings war es nicht möglich den Fortschrittsdialog und den +Thread so zu verknüpfen das sich der Dialog schliesst wenn das Backup +durchgelaufen ist und der Thread wieder entfernt wird. Aus diesem Grund wurde +dann ein erfolgreicher Test mit dem PyQt Modul ~QThread~ footcite:qthread +gemacht. Mit diesem war es ohne weiteres möglich den Dialog zu schliessen +sobald das Backup fertig durchgelaufen war. Auch das stoppen des Threads mit +einem Klick auf den "Cancel" Button funktioniert einwandfrei. Damit gls:borg aus der Anwendung angesteuert werden kann wird das Python Modul -~subprocess~footcite:subprocess verwendet. Dieses erlaubt einem neue Prozesse +~subprocess~ footcite:subprocess verwendet. Dieses erlaubt einem neue Prozesse zu erstellen welche man oftmals benötigt um etwa, wie im Fall von Borg-Qt, externe Applikationen zu starten, zu steuern und ihre Ausgabewerte auszulesen. +Das effektive Kommando wird dann aus dem Property ~self.command~ gelesen. Damit gls:borg die Ausgabe im gls:json Format ausgibt muss man man noch die Parameter ~--log-json~ und ~--json~ ausgeben. Der erste Parameter ändert @@ -2004,6 +2015,13 @@ def process_json_error(self, json_err): raise BorgException(err['message']) #+end_src +Die ganze Funktionalität wurde dann in der Klasse ~BorgQtThread~ +zusammengefasst. Somit kann für jede Funktion von gls:borg eine einzelne Klasse +geschrieben werden welche dann von ~BorgQtThread~ die Funktionen erbt. Die +Funktionsklassen müssen dann jeweils nur die Methode +~self.create_command(self)~ implementieren welche das Property ~self.command~ +erstellt und die einfachen Funktionen von gls:borg sollten direkt funktioneren. + ** Backup Bei den Backups handelt es sich ohne Zweifel um die wichtigste Funktion von