void DialogDIR::thread1Ready() { endeThread_ = endeThread_ + 1; extern int dialog_auswertung; QString err_regfile_; int err_regfile; if (endeThread_ == 1) { if (dialog_auswertung ==0){ progressBar->setValue(100); SekundeRemaining ->setText("0"); int anzahl = werte_holen(2); QString text_integer = QString::number(anzahl); AnzahlgesicherteFile ->setText(text_integer); int cnt_regfile = werte_holen(6); QString cnt_regfile_ = QString::number(cnt_regfile); int cnt_dir = werte_holen(7); QString cnt_dir_ = QString::number(cnt_dir); int cnt_hardlinks = werte_holen(8); cnt_hardlinks = cnt_hardlinks + werte_holen(9); QString cnt_hardlinks_ = QString::number(cnt_hardlinks); int cnt_special = werte_holen(10); QString cnt_special_; cnt_special_ = QString::number(cnt_special); QMessageBox::about(this, tr("Note", "Hinweis"), tr("The backup of the directory was successful.\n", "Die Sicherung des Verzeichnisses war erfolgreich.\n") + cnt_regfile_ + tr(" files, ", " Dateien, ") + cnt_dir_ + tr(" directories, ", " Verzeichnisse, ") + cnt_hardlinks_ + tr(" links and ", " Links und ") + cnt_special_ + tr(" specials have been backed.", " spezielle Daten wurden gesichert.")); } else if (flag_end_dir == 1) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("The backup of the folder was aborted by the user!\n", "Die Sicherung des Verzeichnisses wurde vom Benutzer abgebrochen!\n") ); bt_save->setEnabled(true); } else { // Anzahl nicht korrekt gesicherte Dateien ausgeben err_regfile = werte_holen(1); err_regfile_ = QString::number(err_regfile); int err_dir = werte_holen(2); QString err_dir_ = QString::number(err_dir); int err_hardlinks = werte_holen(3); err_hardlinks = err_hardlinks + werte_holen(5); QString err_hardlinks_ = QString::number(err_hardlinks); QMessageBox::about(this,tr("Note", "Hinweis"), err_regfile_ + tr(" Files, ", " Dateien, ") + err_dir_ + tr(" directories, and ", " Verzeichnisse und ") + err_hardlinks_ + tr(" Links were not backed properly. The backup of the directories was only partially successful\n", " Links wurden nicht korrekt gesichert. Die Sicherung der Verzeichnisse war nur teilweise erfolgreich\n") ); } } thread_run_dir = 0; thread1.exit(); dialog_auswertung = 4; bt_save->setEnabled(true); bt_end->setEnabled(true); progressBar->setValue(0); }
void Thread::run() { extern int dialog_auswertung; extern QString parameter[15]; if (qdummy == "0") { //Zurücksetzen der bekannten oder unbekannten Fehlermeldung werte_uebergeben(1,4); dialog_auswertung = fsarchiver_aufruf(anzahl,parameter[0].toLatin1().data(),parameter[1].toLatin1().data(),parameter[2].toLatin1().data(),parameter[3].toLatin1().data(),parameter[4].toLatin1().data (),parameter[5].toLatin1().data(),parameter[6].toLatin1().data(),parameter[7].toLatin1().data(),parameter[8].toLatin1().data(),parameter[9].toLatin1().data(),parameter[10].toLatin1().data(),parameter[11].toLatin1().data(),parameter[12].toLatin1().data(),parameter[13].toLatin1().data(),parameter[14].toLatin1().data()); if (dialog_auswertung != 0){ //verhindert das Blockieren des Programmes Abfrage in der while Schleife in dir.cpp und mainwindow.cpp float endeThread = werte_holen(4); // Wenn vom Programm bereits eine Fehlermeldung zurückgeschrieben wurde, wird die Fehlermeldungnummer nicht durch 100 ersetzt. if (endeThread ==0) werte_uebergeben(100,4); } } int pos = qdummy.indexOf("dd"); if (qdummy != "0" && pos > -1) //thread Festplatte klonen, Image erstellen dialog_auswertung = system (qdummy.toLatin1().data()); }
void DialogDIR::ViewProzent() { QString sekunde; int sekunde_; QString minute; int minute_; int meldung; int anzahl; int anzahl1; QString text_integer; if (endeThread_ !=1) { timer->singleShot( 1000, this , SLOT(ViewProzent( )) ) ; elapsedTime(); meldung = werte_holen(4); if (meldung >= 100) // Thread Abschluss mit Fehler return; if (flag_View_dir == 1) { anzahl = werte_holen(2); text_integer = text_integer.setNum(anzahl); AnzahlsaveFile ->setText(text_integer); anzahl1 = werte_holen(3); text_integer = text_integer.setNum(anzahl1); AnzahlgesicherteFile ->setText(text_integer); } prozent_ = werte_holen(1); if (dummy_prozent_dir != prozent_) remainingTime(prozent_); else { if (prozent_ > 5) { // Sekunden nach unten zählen // SekundenRemaining einlesen sekunde = SekundeRemaining->text(); sekunde_ = sekunde.toInt(); minute = MinuteRemaining->text(); minute_ = minute.toInt(); if (sekunde_ > 0) { sekunde_ = sekunde_ - 1; if (sekunde_ == 0) { if (minute_ > 0) { minute_ = minute_ - 1; minute = QString::number(minute_); MinuteRemaining ->setText(minute); sekunde_ = 59; } } } sekunde = QString::number(sekunde_); SekundeRemaining ->setText(sekunde); } } dummy_prozent_dir = prozent_; } // bei mehrmaligem Aufruf von fsarchiver wird am Anfang der Sicherung kurzfristig 100 % angezeigt, was falsch ist if (prozent_ <= 99 ) progressBar->setValue(prozent_); if (prozent_ == 99 or endeThread_ >= 1) progressBar->setValue(100); return; }
void DialogDIR::thread2Ready() { endeThread_ = endeThread_ + 1; extern int dialog_auswertung; QString err_regfile_; int err_regfile; int meldung = werte_holen(4); if (endeThread_ == 1) { if (dialog_auswertung ==0){ progressBar->setValue(100); SekundeRemaining ->setText("0"); int cnt_regfile = werte_holen(6); QString cnt_regfile_ = QString::number(cnt_regfile); int cnt_dir = werte_holen(7); QString cnt_dir_ = QString::number(cnt_dir); int cnt_hardlinks = werte_holen(8); cnt_hardlinks = cnt_hardlinks + werte_holen(9); QString cnt_hardlinks_ = QString::number(cnt_hardlinks); int cnt_special = werte_holen(10); QString cnt_special_; cnt_special_ = QString::number(cnt_special); QMessageBox::about(this, tr("Note", "Hinweis"), tr("The restoring of the directory was successful.\n", "Die Wiederherstellung des Verzeichnisses war erfolgreich.\n") + cnt_regfile_ + tr(" files, ", " Dateien, ") + cnt_dir_ + tr(" directories, ", " Verzeichnisse, ") + cnt_hardlinks_ + tr(" links and ", " Links und ") + cnt_special_ + tr(" specials have been restored.", " spezielle Daten wurden wieder hergestellt.")); } if (flag_end_dir == 1) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("The restore of the folder was break by user!\n", "Die Wiederherstellung des Verzeichnisses wurde vom Benutzer abgebrochen!\n") ); meldung = 0; } if (meldung == 100) { // Anzahl nicht korrekt gesicherte Dateien ausgeben err_regfile = werte_holen(1); err_regfile_ = QString::number(err_regfile); int err_dir = werte_holen(2); QString err_dir_ = QString::number(err_dir); int err_hardlinks = werte_holen(3); err_hardlinks = err_hardlinks + werte_holen(5); QString err_hardlinks_ = QString::number(err_hardlinks); QMessageBox::about(this,tr("Note", "Hinweis"), err_regfile_ + tr(" files,", " Dateien, ") + err_dir_ + tr(" directories, and ", " Verzeichnisse und ") + err_hardlinks_ + tr(" links were not correctly restored. The restoring of the lists was only partially successful", " Links wurden nicht korrekt wiederhergestellt. Die Wiederherstellung der Verzeichnisse war nur teilweise erfolgreich\n")); } if (meldung == 103) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("You have entered an incorrect password.\n", "Sie haben ein falsches Passwort eingegeben.\n")); werte_uebergeben(100,4); endeThread_ = 0; lineKey->setText (""); } if (meldung == 104) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("You have tried to restore a directory. The selected file can only restore partitions.\n", "Sie haben versucht ein Verzeichnis wiederherzustellen. Die gewählte Datei kann nur Partitionen wiederherstellen.\n")); } if (meldung == 106) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("Error in fsarchiver. The directory can not be restored!", "Fehler in fsarchiver. Das Verzeichnis kann nicht wiederhergestellt werden!!\n")); endeThread_ = 0; } if (meldung == 107) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("Error! The restoring of the folder was only partially successful!", "Fehler! Das Verzeichnis wurde nur teilweise wiederhergestellt. \n")); endeThread_ = 0; } } thread_run_dir = 0; thread2.exit(); dialog_auswertung = 5; bt_save->setEnabled(true); bt_end->setEnabled(true); }
int DialogDIR::folder_dir_path_einlesen() { int pos = 0; QString Befehl = ""; int zip ; QString compress = ""; QString keyText = ""; Qt::CheckState state1; QModelIndex index = treeView_dir->currentIndex(); //QModelIndexList indexes = selModel->selectedIndexes(); nicht erforderlich folder_dir.append (dirModel->filePath(index)); folder_dir = (dirModel->filePath(index)); //folder_dir.append (model->filePath(index)); //folder_dir = (model->filePath(index)); QModelIndex index1 = treeView_path->currentIndex(); // QModelIndexList indexes1 = selModel1->selectedIndexes(); nicht erforderlich folder_path.append (dirModel1->filePath(index1)); folder_path = (dirModel1->filePath(index1)); QFileInfo info(folder_path); keyText = lineKey->text(); state = chk_overwrite->checkState(); state1 = chk_key->checkState(); int indizierung; //Verzeichnis sichern if (dialog_auswertung == 4){ if (state1 == Qt::Checked && keyText.isEmpty()) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("There was no key for encryption specified.\n", "Es wurde kein Schlüssel für die Verschlüsselung angegeben.\n")); return 1 ; } if (folder_path == "") { QMessageBox::about(this,tr("Note", "Hinweis"), tr("Please select the directory in which the to the directory or file to be saved is to be written.\n", "Bitte wählen Sie das Verzeichnis aus, in das das zu sichernde Verzeichnis bzw die zu sichernde Datei geschrieben werden soll.\n")); return 1 ; } if (folder_dir == "") { QMessageBox::about(this,tr("Note","Hinweis"), tr("Please select the to be directory or file to be saved.\n", "Bitte wählen Sie das zu sichernde Verzeichnis bzw. die zu sichernde Datei aus.\n")); return 1 ; } if (info.isFile() && (dialog_auswertung == 4)) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("You have selected a file. You must select a directory\n", "Sie haben eine Datei ausgewählt. Sie müssen ein Verzeichnis auswählen\n")); return 1 ; } parameter[0] = "fsarchiver"; parameter[1] = "savedir"; zip = cmb_zip->currentIndex()+1; compress = QString::number(zip); compress = "-z" + compress; if (zip == -1) parameter[2] = "-z3"; else parameter[2] = compress; int kerne = cmb_kerne->currentIndex()+1; QString index = QString::number(kerne); if (index == "0") index = "1"; parameter[3] = "-j" + index; indizierung = 4; if (state == Qt::Checked) //Überschreiben ja { parameter[4] = "-o"; indizierung = 5; } if (state1 == Qt::Checked) //Schlüssel ja { parameter[indizierung] = "-c"; parameter[indizierung + 1] = keyText; int len = parameter[indizierung + 1].size(); if (len < 6 || len > 64) { QMessageBox::about(this,tr("Note", "Hinweis"), tr("The key length must be between 6 and 64 characters\n", "Die Schlüssellänge muss zwischen 6 und 64 Zeichen sein\n")); return 0 ; } indizierung = indizierung + 2; } dummy = folder_dir; while (pos != -1) { pos = dummy.indexOf("/"); dummy.replace(pos,1,"-"); } dummy.replace(0,1,"/"); parameter[indizierung] = folder_path + dummy + ".fsa"; SicherungsFolderFileName_dir = parameter[indizierung]; parameter[indizierung+1] = folder_dir; QFile f(parameter[indizierung]); if (parameter[4] != "-o" && (f.exists())){ QMessageBox::about(this,tr("Note", "Hinweis"), tr("The partition file ", "Die Partitionsdatei ") + parameter[6] + tr("already exists. The backup is not performed\n", " ist bereits vorhanden. Die Sicherung wird nicht durchgeführt\n")); return 0 ; } //qDebug() << "befehle" << parameter[0] << parameter[1] << parameter[2] << parameter[3] << parameter[4] << parameter[5] << parameter[6] << parameter[7]; thread1.setValues(indizierung + 2,"0"); indicator_reset(); werte_reset(); bt_save->setEnabled(false); bt_end->setEnabled(false); flag_View_dir = 1; timer->singleShot( 1000, this , SLOT(ViewProzent( ))) ; startThread1(); // fsarchiver wird im Thread ausgeführt return 0; } //Verzeichnis zurückschreiben if (dialog_auswertung == 5){ state = chk_path->checkState(); if (state1 == Qt::Checked && keyText.isEmpty()) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("There was no key to decrypt specified.\n", "Es wurde kein Schlüssel für die Entschlüsselung angegeben.\n")); return 1 ; } if (folder_path == "" && state != Qt::Checked) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("Select the directory in which the saved image will be recovered.\n", "Bitte wählen Sie das Verzeichnis aus, in das das das gesicherte Verzeichnis zurück geschrieben werden soll.\n")); return 1 ; } if (folder_dir == "") { QMessageBox::about(this,tr("Note", "Hinweis"), tr("Please select the existing backup file.\n", "Bitte wählen Sie die vorhandene Sicherungsdatei aus.\n")); return 1 ; } if (info.isDir() && (dialog_auswertung == 4)) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("You have selected a directory. You need a backup file with the extension .fsa select\n", "Sie haben ein Verzeichnis ausgewählt. Sie müssen eine Sicherungsdatei mit der Dateiendung .fsa auswählen\n")); return 1 ; } pos = folder_dir.indexOf("fsa"); if (pos == -1) { QMessageBox::about(this,tr("Note", "Hinweis"), tr("You have chosen the wrong recovery file selected.\n The files should end with. fsa be", "Sie haben eine falsche Wiederherstellungsdatei ausgesucht ausgesucht \nDie Dateiendung muss .fsa sein")); return 1; } // prüfen ob Verzeichnis verschlüsselt // Annahme zunächst kein Schlüssel if (state1 != Qt::Checked) { parameter[0] = "fsarchiver"; parameter[1] = "archinfo"; parameter[2] = folder_dir; fsarchiver_aufruf(3,parameter[0].toLatin1().data(),parameter[1].toLatin1().data(),parameter[2].toLatin1().data(),parameter[3].toLatin1().data()); if (werte_holen(4) == 103){ chk_key->setChecked(Qt::Checked); lineKey->setEnabled(true); QMessageBox::about(this,tr("Note", "Hinweis"), tr("The partition is encrypted. Please enter the key", "Die Partition ist verschlüsselt. Bitte geben Sie den Schlüssel ein\n")); return 1; } } if (state1 == Qt::Checked) { // Verzeichnis mit Schlüssel gesichert parameter[2] = "-c"; parameter[3] = keyText; if (parameter[3].size() < 6 || parameter[3].size() > 64) { QMessageBox::about(this, tr("Note", "Hinweis"), tr("The key length must be between 6 and 64 characters\n", "Die Schlüssellänge muss zwischen 6 und 64 Zeichen sein\n")); return 0 ; } parameter[4] = folder_dir; int retour = fsarchiver_aufruf(5,parameter[0].toLatin1().data(),parameter[1].toLatin1().data(),parameter[2].toLatin1().data(),parameter[3].toLatin1().data(),parameter[4].toAscii().data(),parameter[5].toLatin1().data()); if ( werte_holen(4) == 103 && retour != 0){ QMessageBox::about(this, tr("Note", "Hinweis"), tr("You have entered an incorrect password.", "Sie haben ein falsches Passwort eingegeben. \n")); lineKey->setText (""); return 0; } } parameter[0] = "fsarchiver"; parameter[1] = "restdir"; int kerne = cmb_kerne->currentIndex()+1; QString index = QString::number(kerne); if (index == "0") index = "1"; parameter[2] = "-j" + index; indizierung = 3; if (state == Qt::Checked){ parameter[indizierung] = (folder_dir); //an Originalort zurückschreiben indizierung = indizierung + 1; parameter[indizierung]= ("/"); } else { parameter[indizierung] = folder_dir ; //an gewähltes Verzeichnis zurückschreiben indizierung = indizierung + 1; parameter[indizierung] = folder_path ; } if (state1 == Qt::Checked) { // Verzeichnis mit Schlüssel gesichert parameter[5] = "-c"; parameter[6] = keyText; indizierung = 6; } thread2.setValues(indizierung + 1, "0"); indicator_reset(); werte_reset(); bt_save->setEnabled(false); bt_end->setEnabled(false); flag_View_dir = 2; timer->singleShot( 1000, this , SLOT(ViewProzent( ))) ; startThread2(); // fsarchiver wird im Thread ausgeführt return 0; } return 1; }