Page 1 sur 2

[R] Double barre téléchargement

Posté : mar. 10 juil. 2012 04:05
par Sea
Bonjour je fais acutellement un système qui télécharge automatiquement des new.Cependant j'aimerais avoir 2 progressbar: la 1ere indiquant la progression du téléchargement actuel et la seconde l'état de téléchargement total.

Pour cela j'ai donc fais ceci
► Afficher le texte
En gros dans la boucle for qui parcours chaque fichier je recup et j'addition a mon total, la taille du précédent , puis je le converti en pourcentage.
Apres dans la boucle do(ce fini quand le téléchargement est fini) j'update la progress bar en faisais la valeur des pourcentage déjà effectuer + la valeur du pourcentage du téléchargement courant. Logiquement a la fin du dl la taille téléchargé équivaut à la taille retourné par InetGetSize.
La boucle recommence dans le for n'ayant pas changer la valeur de ma variable de stockage de InetGetSize je l'additionne à mon total etc....
Cependant la barre représentant le total arrive avant celle du dessus ce qui n'est pas normal ^^'

PS: je me suis dis que j'indiquais peut être une mauvaise taille dans le ini mais voici ce que j'utilise pour déterminer la taille
► Afficher le texte
Merci d'avance pour votre aide car la je ne comprend pas pourquoi j'ai ce petit problème :/

Re: [..] Double barre téléchargement

Posté : mar. 10 juil. 2012 07:13
par Tlem
Vous vous compliquez bien la tâche !!!

Puisque vous connaissez le nombre de fichier dès le départ, utilisez la barre de progression totale sur le nombre de fichier et non sur une taille totale que vous ne connaissez pas d'entrée de jeu. :mrgreen:

Re: [..] Double barre téléchargement

Posté : mar. 10 juil. 2012 12:56
par Sea
Mais si je le fais ainsi la barre total sera sur le nombre de fichier et non sur la taille pour prendre un exemple j'ai des fichiers de quelques ko dans mes maj et des fichiers de plusieurs centaines de mb des fois ^^'

De plus je connais la taille total car les fichiers sont sur mon serveur. Comme je le dis j'ai fais le script du dessous pour connaitre la taille d'un répertoire. Après je n'ai plus qu'a le mettre dans mon ini dans "taille" => Local $s_ReleaseTaille = IniRead($s_DatFile_Local, 'INI', 'taille', 'Erreur de lecture')

Re: [..] Double barre téléchargement

Posté : mar. 10 juil. 2012 14:01
par mikell
Si pour la progressbar 1 tu fais le % téléchargé/total pour chaque fichier successivement, alors pour la 2 tu peux concaténer ces quantités téléchargées pour calculer le % avec la taille de l'ensemble des fichiers
Regarde la fonction InetGetX de matwachich, elle est super-bien faite et te renvoie dans une petite fonction Callback() toutes les infos dont tu as besoin
Un exemple assez complet ici
http://www.autoitscript.fr/forum/viewto ... 806#p68806

Re: [..] Double barre téléchargement

Posté : mar. 10 juil. 2012 16:47
par Sea
Je n'ai pas compris la réelle différence qu'il a avec mon script.
le seul changement que j'ai vu c'est qu'au lieu d'avoir la taille par InetGetSize ça sera les donnés reçu par les socket?

Re: [..] Double barre téléchargement

Posté : sam. 14 juil. 2012 00:03
par Sh4dows
Serait il possible d'avoir les fichiers INI avec des valeurs par défaut de manière à effectuer quelques tests ?
Sinon j'ai du mal a comprendre ton premier calcul :

Code : Tout sélectionner

$_perc_total = Round ( ( 100 * $_FileSize ) / $s_ReleaseTaille )
 
Peut importe la valeur de $s_ReleaseTaille tu obtiendra toujours 0 puisque 0/(x>0) = 0 !!!
Autant faire :

Code : Tout sélectionner

$_perc_total =0
 
J'en déduis donc que tes calculs sont faux :lol: Cependant, j'ai commencé à faire une analyse commenté de ton code, mais sans les INI cela devient un peu plus complexe et je ne peux pas poursuivre.
Mon code -> http://pastebin.com/E6m7quiK

Je te conseil de le coller dans un éditeur de code il sera bien plus que lisible :wink:

Sh4dows,

Re: [..] Double barre téléchargement

Posté : sam. 14 juil. 2012 09:27
par Tlem
Sh4dows a écrit :Sinon j'ai du mal a comprendre ton premier calcul :

Code : Tout sélectionner

$_perc_total = Round ( ( 100 * $_FileSize ) / $s_ReleaseTaille )
 
Peut importe la valeur de $s_ReleaseTaille tu obtiendra toujours 0 puisque 0/(x>0) = 0 !!!
:shock:
Comment un nombre entier > 0 multiplié par 100 (100 * $FileSize) peut-il être égal à zéro ?

Re: [..] Double barre téléchargement

Posté : sam. 14 juil. 2012 09:50
par Sh4dows
@Tlem en regardant son code vous auriez remarqué que $FileSize valait aussi 0 :roll:
Première ligne :

Code : Tout sélectionner

Local $size = 0 ,$_FileSize = 0
 
Donc un nombre entier 0 multiplié par 100 donne bien 0 chez moi :P Ensuite la division est complètement inutile derrière puisque le résultat restera la même !

Re: [..] Double barre téléchargement

Posté : sam. 14 juil. 2012 10:20
par mikell
Initialisation de variable :roll:

Code : Tout sélectionner

$_FileSize = 0
...
For $i = 0 to $s_ReleaseNum
    $_perc_total = Round ( ( 100 * $_FileSize ) / $s_ReleaseTaille )
    ...
    $_FileSize = InetGetSize($s_ReleaseAdr&$s_ReleaseFile)
    ...
Next

Re: [..] Double barre téléchargement

Posté : sam. 14 juil. 2012 10:21
par Sh4dows
mikell a écrit ::roll:

Code : Tout sélectionner

$_FileSize = 0
...
For $i = 0 to $s_ReleaseNum
    $_perc_total = Round ( ( 100 * $_FileSize ) / $s_ReleaseTaille )
    ...
    $_FileSize = InetGetSize($s_ReleaseAdr&$s_ReleaseFile)
    ...
Next
+1 :lol:

Re: [..] Double barre téléchargement

Posté : sam. 14 juil. 2012 10:30
par mikell
T'as vraiment du mal avec les boucles For toi...

Code : Tout sélectionner

$_FileSize = 0
For $i = 1 to 5
    $_perc_total = Round ( ( 100 * $_FileSize ) / 1000 )
    $_FileSize += $i*100
    Msgbox(0,"", $_perc_total)
Next

Re: [..] Double barre téléchargement

Posté : sam. 14 juil. 2012 10:37
par Sh4dows
Qui ? moi ? du mal avec les boucles for ?
J'ai compris :roll: Je retourne me couché ça vaut mieux :lol:

Re: [..] Double barre téléchargement

Posté : lun. 23 juil. 2012 13:12
par Sea
Désolé pour le retard voici la structure de mon ini(pour avoir la taille j'utilise le script que j'ai donné au dessus dans le 1er post, de plus j'ai essayé de mettre la taille cumulé des truc téléchargé retourné par inetgetsize et toujours le même problème :/)

Code : Tout sélectionner

[INI]
nb_file=2
taille=1000
adresse=http://monsite.com/monRépertoire/maMaj/
new_ini=http://monsite.com/monRépertoire/maMaj/Version.ini
file1=1.txt
real_name1=#onB}Z+yYKddN
file2=2.txt
real_name2=%.UWaee!Zyeo`AE5.$a!!k
 

Re: [..] Double barre téléchargement

Posté : mar. 24 juil. 2012 23:31
par Sea
up....

Si vous avez besoin de plus d'information dites le moi ^^'

Re: [..] Double barre téléchargement

Posté : ven. 10 août 2012 20:50
par Sea
Up...

Je pense recoder tout le système donc si vous pouvez me donner un exemple pour faire ceci( de préférence sans ini en gros en allant sur l'index récupéré le nombre de fichier dans le dossier et faire un InetFileGetSize sur chaque fichier. Je pense que c'est possible donc mon problème c'est bien de faire 2 barre de téléchargement)

Re: [..] Double barre téléchargement

Posté : mar. 14 août 2012 22:54
par blacksoul305
Bonsoir, je propose une idée :

si vous connaissez exactement la taille des fichiers à télécharger, car comme vous l'avez dit, ils 'agit de votre serveur. Pourquoi ne pas envoyer tout simplement une requête au serveur qui dans ce cas là, renverrait la taille total des fichiers.

Le calcul du pourcentage devrait s'effectuer sans encombres, j'me trompe ?

Re: [..] Double barre téléchargement

Posté : mer. 15 août 2012 11:31
par mikell
Au risque de paraître lourd je redis que la fonction InetGetX de matwachich est un excellent plan, dans la mesure où elle fournit toutes les données nécessaires et surtout permet une interruption/reprise du (des) téléchargement(s)
Exemple complet avec les 2 progressbar :
► Afficher le texte

Re: [..] Double barre téléchargement

Posté : mer. 15 août 2012 22:48
par Sea
@Mikell => Au risque de paraître lourd
Mikell exactement ce que je voulais donc je t'en voudrais pas d'être un gros chat :P
blacksoul305 a écrit : si vous connaissez exactement la taille des fichiers à télécharger, car comme vous l'avez dit, ils 'agit de votre serveur. Pourquoi ne pas envoyer tout simplement une requête au serveur qui dans ce cas là, renverrait la taille total des fichiers.
Il s'agit d'un serveur Xamp donc à ce que je sache il n'existe pas de requête comme ceci par contre ce que je peux faire c'est un script php qui va me retourné la taille à téléchargé puis je récup cette valeur avec un _inetgetsource

Re: [..] Double barre téléchargement

Posté : mer. 15 août 2012 22:56
par blacksoul305
Oui, enfin je pensais à une fonction personnalisée que vous auriez au préalablement créé qui retournerait la taille totale. Mais vous avez trouvé votre solution donc c'est parfait !

Bonne continuation !

Re: [..] Double barre téléchargement

Posté : jeu. 16 août 2012 01:15
par Sea
Par contre j'ai une petite question je vois que celui-ci supporte l’arrêt et le redémarrage du téléchargement.Ce basant sur le nombre de byte contenu en local.

Mais prenons cette exemple.
Contenu MAJ 1 =>
sur le serveur => 1.txt a téléchargé en local => 1.txt
sur le serveur => 2.txt a téléchargé en local => 2.txt
Contenu MAJ 2 =>
sur le serveur => 1.txt a téléchargé en local => 1.txt
sur le serveur => 2.txt a téléchargé en local => 2.txt

Que va t'il ce passé dans le cas ou les fichiers locaux ont les mêmes noms et destination?
Comment le script détecte que c'est bien les deux mêmes fichiers?
Pour cela je pense ajouter une fonction MD5 a l'udf
(j'ai un script php qui me donne le nombre de fichier/le hash md5 de chaque fichier/ la taille de chaque fichier/ le total de la taille / le nombre total de fichier)

► Afficher le texteCodé en 3min a 1h du mat donc possibilité de non optimisation >.<