From: hama Date: Wed, 27 Apr 2016 21:40:45 +0000 (+0200) Subject: rebackgui: selecting target works (linux) X-Git-Url: https://gitweb.hamatoma.de/?a=commitdiff_plain;h=6a4bc2edc74862f0d91a7718e460569affc622d4;p=reqt rebackgui: selecting target works (linux) --- diff --git a/appl/rebackgui/BackupUtils.cpp b/appl/rebackgui/BackupUtils.cpp index 0e9538d..91891b4 100644 --- a/appl/rebackgui/BackupUtils.cpp +++ b/appl/rebackgui/BackupUtils.cpp @@ -30,6 +30,39 @@ QString BackupUtils::dateToString(const QDateTime &dateTime) QString rc = dateTime.toString("yyyy.MM.dd/hh:mm:ss"); return rc; } +/** + * Finds the system independent name of a target directory. + * + * Under linux: the result is a combination of the filesystem label + * and the relative path. + * + * @param path the path of the mounted backup directory. + * @return the abstract backup directory + */ +QString BackupUtils::findAbstractTarget(const QString& path, ReLogger* logger) +{ + QString rc; +#if defined __linux__ + QStringList args; + args << "/usr/local/bin/osconnect.pl" + << "find-label" << path; + QByteArray output = ReProcess::executeAndRead("/usr/bin/perl", args, 20); + QByteArrayList lines = output.split('\n'); + if (lines.count() < 2){ + logger->log(LOG_ERROR, LOC_FIND_TARGET_1, "missing lines from osconnect.pl"); + } else if (lines.at(1).startsWith("+++")) { + logger->logv(LOG_ERROR, LOC_FIND_TARGET_2, "mounting failed: %s", + lines.at(1).mid(3).constData()); + } else { + rc = QString::fromUtf8(lines.at(0)) + ";" + + QString::fromUtf8(lines.at(1)); + } +#elif defined _WIN32 + rc = ";" + path.mid(2); +#endif + return rc; +} + /** * Finds the real path of a target directory. diff --git a/appl/rebackgui/BackupUtils.hpp b/appl/rebackgui/BackupUtils.hpp index 3c41797..1f97ee1 100644 --- a/appl/rebackgui/BackupUtils.hpp +++ b/appl/rebackgui/BackupUtils.hpp @@ -18,6 +18,7 @@ public: BackupUtils(); public: static QString dateToString(const QDateTime& dateTime); + static QString findAbstractTarget(const QString& path, ReLogger* logger); static QString findTarget(const BackupItem& item, ReLogger* logger); static QString nameOfTargetDescription(const QString &path); static bool prepareTarget(const QString &path, BackupItem &item, ReLogger *logger); diff --git a/appl/rebackgui/mainwindow.cpp b/appl/rebackgui/mainwindow.cpp index 2050c66..df5bea3 100644 --- a/appl/rebackgui/mainwindow.cpp +++ b/appl/rebackgui/mainwindow.cpp @@ -89,12 +89,12 @@ void MainWindow::expandFileList(const QString info){ * Find the target identification. * * @param dir the directory on the external medium (already mounted) - * @return the relative path */ -QString MainWindow::extractTarget(const QString& dir){ +void MainWindow::extractTarget(const QString& dir){ QString rc; QString target; #if defined __linux__ + target = BackupUtils::findAbstractTarget(dir, &m_logger); #elif defined _WIN32 rc = dir; if (dir.length() >= 2 && dir.at(1) == ':') @@ -104,7 +104,6 @@ QString MainWindow::extractTarget(const QString& dir){ target = ";" + rc; #endif ui->lineEditTarget->setText(target); - return rc; } /** @@ -596,7 +595,11 @@ void MainWindow::onSelectTarget(){ QString dir = ui->lineEditTarget->text(); int pos = dir.indexOf(';'); if (pos < 0){ +#ifdef __linux__ + dir = "/media"; +#else dir.clear(); +#endif } else { dir.remove(0, pos + 1); if (! ReFileUtils::isAbsolutPath(dir)) diff --git a/appl/rebackgui/mainwindow.hpp b/appl/rebackgui/mainwindow.hpp index 0b16df3..1f63750 100644 --- a/appl/rebackgui/mainwindow.hpp +++ b/appl/rebackgui/mainwindow.hpp @@ -40,7 +40,7 @@ public: void saveState(); protected slots: private: - QString extractTarget(const QString& dir); + void extractTarget(const QString& dir); void initializeGui(); bool initializeStart(); void writeTargetConfiguration(BackupItem& item, const QString& target); diff --git a/appl/rebackgui/osconnect.pl b/appl/rebackgui/osconnect.pl index 1cb2275..cf3470c 100755 --- a/appl/rebackgui/osconnect.pl +++ b/appl/rebackgui/osconnect.pl @@ -1,19 +1,26 @@ #! /usr/bin/perl use strict; +use POSIX (); my $mode = shift; my %devs; my (%g_devOfPoint, %g_pointOfDev, %g_devOfLabel, %g_labelOfDev); - +&LogIt; if ($mode eq "find-label"){ - my $targetPath = shift; - if (! -d $targetPath){ - &Usage("not a directory: $targetPath"); + if ($ENV{"DEBUG_LABEL"} ne ""){ + my $var = $ENV{"DEBUG_LABEL"}; + my @lines = split(/;/, $var); + print join("\n", @lines); + } else { + my $targetPath = shift; + if (! -d $targetPath){ + &Usage("not a directory: $targetPath"); + } + &FindLabels; + &FindMountPoints; + &PrintLabelAndRelPath($targetPath); } - &FindLabels; - &FindMountPoints; - &PrintLabelAndRelPath($targetPath); } elsif ($mode eq "search-target"){ my $label = shift; my $relPath = shift; @@ -63,7 +70,6 @@ if ($mode eq "find-label"){ &Usage("unknown mode"); } - sub Usage{ my $msg = shift; print <){ if(/(\S+): LABEL="(.*?)"/){ $g_devOfLabel{$2} = $1; @@ -108,12 +114,11 @@ sub FindLabels{ } } close $CMD; - return %devs; } # stores the relation of devices and mount points. sub FindMountPoints{ - open(my $CMD, "mount|") || die "cannot execute mount: $!"; + open(my $CMD, "mount|") || die "+++ cannot execute mount: $!"; my ($label, $relPath); while(<$CMD>){ # /dev/sdb1 on /media/src type vfat (rw,...) @@ -138,6 +143,7 @@ sub PrintLabelAndRelPath{ $label = $g_labelOfDev{$dev}; $relPath = substr($subdirOfMountpoint, length($path) + 1); print "L=$label\n$relPath\n"; + last; } } } @@ -154,3 +160,10 @@ sub Exec{ my $cmd = shift; system($cmd); } + +sub LogIt{ + my $id = qx(id -u); + open(my $OUT, ">", "/tmp/info.txt"); + print $OUT "id: $id euid: $>\n"; + close $OUT; +} diff --git a/appl/rebackgui/rebackgui.de.qm b/appl/rebackgui/rebackgui.de.qm index ca4ccf5..8bda667 100644 Binary files a/appl/rebackgui/rebackgui.de.qm and b/appl/rebackgui/rebackgui.de.qm differ diff --git a/appl/rebackgui/rebackgui.de.ts b/appl/rebackgui/rebackgui.de.ts index b8a17ec..3c5b081 100644 --- a/appl/rebackgui/rebackgui.de.ts +++ b/appl/rebackgui/rebackgui.de.ts @@ -36,7 +36,7 @@ p, li { white-space: pre-wrap; } Version: - + Version: @@ -209,7 +209,7 @@ p, li { white-space: pre-wrap; } - + Calculates checksums for source and target files and reports differences Berechnet Prüfsummen für Quell- und Zieldateien und meldet Unterschiede @@ -350,196 +350,226 @@ p, li { white-space: pre-wrap; } Fehlerprotokoll: - + Fi&le File Bearbeiten - Datei + Datei - + Edi&t Edit - Bearbeiten + Bearbeiten - + Hel&p Help - Hilfe + Hilfe + + + + A&ction + Aktion - + &Load Config Load Config - Konfiguration laden + Konfiguration laden - + &Save Config Save Config - Konfiguration sichern + Konfiguration sichern - + &Exit Exit - Beenden + Beenden - + &Start backup Start backup - Sicherung starten + Sicherung starten + + + + St&op + Halt - + &About About - Über + Über + + + + &Checksums + Prüfsummen + + + + C&lean + Löschen - + &English English - + Englisch - + &German German - + Deutsch - - - + + &Autosave + &Autom. speichern + + + + + no backup item selected Kein Sicherungselement ausgewählt - - - + + + Target not available Ziel nicht vorhanden - + Select Source Directory Quellverzeichnis auswählen - + Select Target Directory Zielverzeichnis auswählen - + target initialized with %1 Ziel mit %1 vorbelegt + + + Aborted by the user + Abbruch durch den Benutzer + QObject - + cannot remove file (for making a directory (%1): %2 kann Datei nicht löschen, um ein Verzeichnis anzulegen (%1): %2 - + cannot make directory (%1): %2 kann Verzeichnis nicht anlegen (%1): %2 - - + + %1 of %2 (%3 of %4) %5 MB/sec runtime: %6 %1 von %2 (%3 von %4) %5 MB/sec Laufzeit: %6 - + backup complete after %1. Errors: %2 Sicherung nach %1 fertiggestellt Fehler: %2 - + cannot build checksum: %1 Kann Prüfsumme nicht ermitteln: %1 - + Building source checksum complete after %1. Processed: %2 Erzeugen der Prüfsummen für die Quelldateien fertig nach %1. Bearbeitet: %2 - + checksum differs: Prüfsummen unterscheiden sich: - + Building target checksums complete after %1. Processed: %2 Errors: %3 Erzeugen der Prüfsummen für die Zieldateien fertig nach %1. Bearbeitet: %2 Fehler: %3 - + cannot delete (%1): %2 Kann nicht löschen (%1): %2 - + cannot remove directory (%1): %2 Kann Verzeichnis nicht erstellen (%1): %2 - + cannot create the shadow directory: %1 Kann das Schattenverzeichnis nicht erstellen: %1 - + cannot delete shadow file (%1): %2 Kann Schattendatei nicht löschen (%1): %2 - + cannot rename target file (%1): %2 -> %3 Kann Zieldatei nicht umbenennen (%1): %2 -> %3 - + %1 of %2 files %3 files/sec runtime: %6 %1 von %2 Dateien %3 Dateien/sec Laufzeit: %6 - + clean complete after %1. Errors: %2 Bereinigen fertig nach %1. Fehler: %2 - + Search finished: to process: %1 with %2 matching: %3 total: %4 subdirs: %5 runtime: %6 Suche beendet: zu behandeln: %1 mit %2 passend: %3 gesamt: %4 Unterverz: %5 Laufzeit: %6 - + kann Schattenverzeichnis nicht umbenennen: %1 -> %2 - + kann Schattenverzeichnis nicht umbenennen: %1 -> %2 - + cannot create shadow directory (%1): %2 Kann Schattenverzeichnis nicht erstellen (%1): %2 - + cannot move to shadow directory (%1): %2 -> %3 Kann Datei nicht in Schattenverzeichnis verschieben (%1): %2 -> %3 - + Search in target finished: to process: %1 with %2 dirs to delete: %3 total: %4 subdirs: %5 runtime: %6 Suche im Ziel bendet: zu behandeln: %1 mit %2 zu löschende Verzeichnisse: %3 gesamt: %4 Unterverz.: %5 Laufzeit: %6 @@ -551,8 +581,8 @@ p, li { white-space: pre-wrap; } - - + + cannot open (%1): %2 Kann nicht öffnen (%1): %2 @@ -573,22 +603,22 @@ p, li { white-space: pre-wrap; } Konfiguration gespeichert: %1 - + Search started... Suche gestartet... - + yes Ja - + no nein - + not found: %1 Nicht gefunden: %1 @@ -597,37 +627,47 @@ p, li { white-space: pre-wrap; } Kann nicht schreiben(%1): %2 [%3/%4] - + copy file failed (%1): %2 - + Dateikopieren missglückt (%1): %2 - + + not a regular file: %1 + Keine normale Datei: %1 + + + cannot write (%1): %2 [%3/%4] Kann nicht schreiben(%1): %2 [%3/%4] - + file can be read only partitionally: %1 [%2/%3] Datei kann nur teilweise gelesen werden: %1 [%2/%3] - + cannot set date/time (%1): %2 Kann Datum/Zeit nicht setzen (%1): %2 - + cannot set permissions (%1): %2 Kann Dateirechte nicht setzen (%1): %2 - + + cannot set user/gid [%1/%2] (%3): %4 + Kann Benutzer/Gruppe nicht setzen [%1/%2] (%3): %4 + + + can't create directory (%1): %2 Kann Verzeichnis nicht erzeugen (%1): %2 - + can't create directory (is a file): Kann Verzeichnis nicht erzeugen (ist eine Datei):