void stylesheet_export_bibledit(const ustring & name, const ustring & filename) // Exports a stylesheet in standard bibledit format. { ustring originalfile = stylesheet_xml_filename(name); ustring destinationfile(filename); destinationfile.append(STYLESHEET_XML_SUFFIX); unix_cp(originalfile, destinationfile); }
void FileSignAndEncryption::on_okButton2_clicked() { ui->warningLabel2->setText(""); if (ui->sourceFileEdit2->text().startsWith("~/") || ui->destinationFileEdit2->text().startsWith("~/")) { ui->warningLabel2->setText("Seul les chemins absolus sont autorisés."); return; } if (ui->sourceFileEdit2->text() == ui->destinationFileEdit2->text()) { ui->warningLabel2->setText("Vous ne pouvez pas utiliser le même fichier source et destination."); return; } QFile sourcefile(ui->sourceFileEdit2->text()); if (!sourcefile.exists()) { ui->warningLabel2->setText("Le fichier source n'existe pas."); return; } QFileInfo sourceFileInfo(sourcefile); if (!sourceFileInfo.isReadable()) { ui->warningLabel2->setText("Vous n'avez pas les droits de lecture sur le fichier source."); return; } QFile destinationfile(ui->destinationFileEdit2->text()); if (destinationfile.exists()) { if (!destinationfile.remove()) { ui->warningLabel2->setText("Impossible d'écraser le fichier existant. Veuillez modifier la destination."); return; } } QFileInfo destinationFileInfo(destinationfile); QFileInfo destinationDirInfo(destinationFileInfo.absoluteDir().path()); if (!destinationDirInfo.isWritable()) { ui->warningLabel2->setText("Vous n'avez pas les droits d'écriture sur le dossier destination."); return; } // On récupère l'indice des lignes selectionnées QModelIndexList selectedIndex = ui->tableWidgetRecipient2->selectionModel()->selectedIndexes(); QList<int> rowIndexes; for (QModelIndex index : selectedIndex) { if (!rowIndexes.contains(index.row())) { rowIndexes.append(index.row()); } } // On récupère l'indice des lignes selectionnées pour le signataire QModelIndexList selectedIndexSign = ui->tableWidgetSign->selectionModel()->selectedIndexes(); QList<int> rowIndexesSign; for (QModelIndex index : selectedIndexSign) { if (!rowIndexesSign.contains(index.row())) { rowIndexesSign.append(index.row()); } } if (rowIndexes.count() == 0) { ui->warningLabel2->setText("Vous devez sélectionner au moins un destinaire."); return; } if (rowIndexesSign.count() == 0) { ui->warningLabel2->setText("Vous devez sélectionner un signataire."); return; } /* Utilisé pour paramétré les intéractions car gpg est tellement * intelligent qu'il les demandes dans l'ordre inverse pour le cas anonyme */ QList<int> reverseRowIndexes; reverseRowIndexes.reserve(rowIndexes.size()); std::reverse_copy(rowIndexes.begin(), rowIndexes.end(), std::back_inserter(reverseRowIndexes)); QStringList opt; opt << "--command-fd=0" << "--status-fd=1" << "-a" << "--sign" << "--default-key " + ui->tableWidgetSign->item(rowIndexesSign[0], 0)->text() << "--output" << ui->destinationFileEdit2->text(); QString cmd = "-e"; QStringList arg; arg << ui->sourceFileEdit2->text(); QStringList interactions; if (ui->anonymousCheckBox->isChecked()) { for (int i : rowIndexes) { opt << "-R \"" + ui->tableWidgetRecipient2->item(i, 0)->text() + " <" + ui->tableWidgetRecipient2->item(i, 1)->text() + ">\""; } for (int i : reverseRowIndexes) { if (ui->tableWidgetRecipient2->item(i, 3)->text() == GpgObject::validityToStr(VALIDITY_NO_VALUE) || ui->tableWidgetRecipient2->item(i, 3)->text() == GpgObject::validityToStr(VALIDITY_UNDEFINED)) { interactions << "y"; } } } else { for (int i : rowIndexes) { interactions << ui->tableWidgetRecipient2->item(i, 0)->text() + " <" + ui->tableWidgetRecipient2->item(i, 1)->text() + ">"; if (ui->tableWidgetRecipient2->item(i, 3)->text() == GpgObject::validityToStr(VALIDITY_NO_VALUE) || ui->tableWidgetRecipient2->item(i, 3)->text() == GpgObject::validityToStr(VALIDITY_UNDEFINED)) { interactions << "y"; } } interactions << ""; } Action action(cmd, arg, opt, interactions); m_manager->setAction(action); connect(m_manager, &GPGManager::finished, this, &FileSignAndEncryption::onEncryptionCompleted); m_manager->execute(); }