Пример #1
0
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);
}
Пример #2
0
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();
}