Esempio n. 1
0
bool DDZ::enregistre(QString fichier, QString contenu, QString langue, QStringList annexes, QStringList ignore){
    //Paramètres de fonction
    ErrorManager instance_erreur;

    QZipWriter ddz_global(fichier, QIODevice::WriteOnly);

    //Création d'un XML global pour les préférences
    QDomDocument preferences;
    QDomElement xmlConfig = preferences.createElement("config");
    QDomElement xmlLangue = preferences.createElement("langue");
    QDomText xmlLangueTexte = preferences.createTextNode(langue);
    xmlLangue.appendChild(xmlLangueTexte);
    xmlConfig.appendChild(xmlLangue);

    //On remplit le fichier avec le contenu
    QString nom_fichier = fichier.split("/").last();
    //Le nom du fichier est le même que le nom de l'archive globale si ce n'est que l'extention change
    nom_fichier.remove(nom_fichier.size()-4, nom_fichier.size()).append(".ddw");


    QByteArray array_contenu;
    array_contenu.append(contenu);
    ddz_global.addFile(nom_fichier, array_contenu);

    //On regarde s'il y avait des images
    int nb_images = contenu.count("<img src=");

    //Il y a des images, on rentre dans la boucle
    if(nb_images > 0){
        //Définition de la RegExp
        QRegExp regexp_images("<img[^>]*src=\"([^\"]*)");

        //Récupération des images
        int pos = 0; QStringList list;
        while ((pos = regexp_images.indexIn(contenu, pos)) != -1){
            list << regexp_images.cap(1);
            pos += regexp_images.matchedLength();
        }

        if(nb_images != list.size()){
            //On a pas trouvé toutes les images (ou on en a trouvé trop, ce qui est pire)
            instance_erreur.Erreur_msg(QObject::tr("Problème lors de la détection d'images -> annulation de la sauvegarde"), QMessageBox::Ignore);
            return false;
        }

        //Si on est ici, c'est que tout roule
        //On ajoute les images détectées au zip
        //ddz_global.addDirectory("images");
        for(int i=0; i<list.size(); i++){
            QString liste_temp = list.at(i);
            QString nom_fichier = liste_temp.split("/").last();
            //nom_fichier.prepend("images/");
            //On récupère l'extention
            QString extention = list.at(i).section('.', -1);
            QImageReader image(list.at(i), extention.toUpper().toStdString().c_str());
            ddz_global.addFile(nom_fichier, image.device());
        }
    }

    //Traitement des annexes
    if(annexes.size() > 0){
        QDomNode xmlAnnexe = preferences.createElement("annexes");
        for(int i=0; i<annexes.size(); i++){
            QFile fichier(annexes.at(i));
            fichier.open(QFile::ReadOnly);
            ddz_global.addFile(annexes.at(i).split("/").last(), fichier.readAll());
            fichier.close();
            //Ajout des annexes au XML global
            QDomElement thisAnnexe = preferences.createElement("annexe");
            QDomText thisText = preferences.createTextNode(annexes.at(i).split("/").last());
            thisAnnexe.appendChild(thisText);
            xmlAnnexe.appendChild(thisAnnexe);
            xmlConfig.appendChild(xmlAnnexe);
        }
    }

    //Traitement des mots à ignorer définitivement (ajout dans le XML de config)
    if(ignore.size() >= 1){
        QDomNode xmlIgnore = preferences.createElement("orthographe");
        for(int i=0; i<ignore.count(); i++){
            QDomElement motIgnore = preferences.createElement("mot");
            QDomText motTexte = preferences.createTextNode(ignore.at(i));
            motIgnore.appendChild(motTexte);
            xmlIgnore.appendChild(motIgnore);
            xmlConfig.appendChild(xmlIgnore);
        }
    }

    //Enregistrement des préférences
    preferences.appendChild(xmlConfig);
    QDomNode noeud = preferences.createProcessingInstruction("xml","version=\"1.0\"");
    preferences.insertBefore(noeud, preferences.firstChild());
    QByteArray array_prefs;
    array_prefs.append(preferences.toString());
    ddz_global.addFile("config.xml", array_prefs);

    //On ferme tout
    ddz_global.close();


    return true;
}