Bonjour

Je suis entrain de voir pour faire une liste de fichier à télécharger pour mon updater.
Donc je fait une requête post et dedans je fais une comparaison avec le md5 pour savoir les fichiers à télécharger ou non.

Mais la je suis fasse à un problème de logique surtout...

Je récupère la balise xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
<fichier name="QtCore4.dll" dir="" md5="<?php echo md5_file('QtCore4.dll'); ?>" />
<fichier name="test.dll" dir="test/" md5="<?php echo md5_file('test.dll'); ?>" />
Donc déjà il faudrait que je fasse le code de tel façon a ce que j'ai le chemin, et le nom du fichier et si possible le md5 pour faire une comparaison quand on déplace le fichier du dossier temporaire au dossier d'installation du programme.

Donc après je fais une liste sous cette forme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
 
QList<QString> listElemAjout;
 
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    QXmlStreamReader reader(reply->readAll());
    reader.readNext();
 
    while(!reader.atEnd())
    {
        reader.readNext();
 
        if(reader.error())
        {
            qDebug() << reader.error();
            return;
        }
        if(reader.isStartElement())
        {
            if (reader.name() == "liste_fichiers")
            {
                while(!(reader.isEndElement() && reader.name().compare("liste_fichiers")==0))
                {
                    reader.readNext();
 
                    if(reader.isStartElement() && reader.name() == "fichier")
                    {
                        QString attrNAME = reader.attributes().value("name").toString();
                        QString attrDIR = reader.attributes().value("dir").toString();
                        QString attrMD5 = reader.attributes().value("md5").toString().trimmed();
                        QString strNameContrib = reader.readElementText();
 
                        QString cheminDuRepertoire = QCoreApplication::applicationDirPath();
                        QDir repertoire(cheminDuRepertoire);
                        repertoire.setFilter(QDir::NoDotAndDotDot | QDir::Files);
 
                        if(QFile::exists(attrDIR+attrNAME) == false)
                        {
                            listElemAjout.push_back(attrNAME);
                        }
 
                        foreach(QFileInfo fileInfo, repertoire.entryInfoList())
                        {
                            QFile file(fileInfo.absoluteFilePath());
                            file.open(QIODevice::ReadOnly);
                            QByteArray data = file.readAll();
                            QCryptographicHash md5(QCryptographicHash::Md5);
                            md5.addData(data);
                            QByteArray hah = md5.result();
 
                            if(fileInfo.fileName() == attrNAME)
                            {
                                if(attrNAME.compare(fileInfo.fileName(), Qt::CaseInsensitive) == 0)
                                {
                                    listElemAjout.push_back(attrNAME);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    // Liste de tout les noms de fichiers à télécharger
    for (int i = 0; i < listElemAjout.size(); i++)
    {
        qDebug() << listElemAjout[i];
    }
 
    reply->deleteLater();
    telechargement_fichier();
}
 
void FenUpdater::telechargement_fichier()
{
    // Boucle pour télécharger tout les fichiers de la liste !
    QNetworkRequest url_requete(QUrl("fichier"));
    QNetworkAccessManager *manager = new QNetworkAccessManager;
    QNetworkReply *reply = manager->get(url_requete);
    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(messageErreur(QNetworkReply::NetworkError)));
    connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(infos_telechargement_fichier(qint64, qint64)));
    connect(reply, SIGNAL(finished()), this, SLOT(enregistrer()));
}
Et ensuite il faudrait que je mets en paramètre la liste pour le slot telechargement_fichier.
Et la arrive un nouveau problème... Comment tous les télécharger et ensuite aller au slot enregistrer pour les enregistrer dans le fichier temporaire ?
Il faudrait pas mieux que je fasse la copie dans ce même slot telechargement_fichier() ?

Merci !