Page 1 sur 1

[R] Où placer mon code de ProgressBar ?

Posté : jeu. 05 juin 2008 02:28
par arrkhan
Bonjour à tous,

Comme vous le savez peut etre, je reviens d'un raid de trois semaines au Maroc, ou j'ai pris beaucoup de photos, et où les 13 autres equipages en ont pris egalement, nous avons donc decide de mettre toute nos photos sur un serveur dedié, et j'ai pris l'initiative de faire une tite application pour ne pas filer les identifiants a tous le monde.

Aprés vous avoir raconté ma vie, je vous expose mon probleme.

Le .zip ci dessous contient le AU3, l'exe et ftpdmin(pour creer un serveur en 2 clic)

a propos du AU3:

ligne 81 :
$Speed = "768" pour accelerer le demarrage de l'application sans faire de test d'upload reel.
pour faire le test
remplacer ligne 81 $Speed = "768" par $Speed = _GetSpeed(1)
remplacer ligne 84 $SpeedKo = Round($Speed / 8, 0) par $SpeedKo = Round($Speed[1] / 8, 0)

lignes 118 à 120 :
$server = '*******.*****.***' pour utiliser avec ftpdmin 127.0.0.1
$username = '*******' non requis ftpdmin
$pass = '*********' non requis ftpdmin

voici ce que j'aimerai inclure sans y parvenir :

la progressbar de l'upload de fichier :

Code : Tout sélectionner

For $i = 0 To FileGetSize(Chemin/du/fichier) Step ($SpeedKo * 1024)
    ;MsgBox(0, '', 'Chemin/du/fichier' & " = " & FileGetSize($s_LocalFolder & "\" & $file) & @CRLF & _
    ;       "vitesse = " & ($SpeedKo * 1024) & @CRLF & _
    ;       "sleep = " & round(_TimeFormat(FileGetSize($s_LocalFolder & "\" & $file) / ($SpeedKo * 1024), 1), 0))
    GUICtrlSetData($ProgressFile, $i)
    
    $wait = _TimeFormat(FileGetSize(Chemin/du/fichier) / ($SpeedKo * 1024), 1)
    Sleep($wait)
    Next

traduction rapide :

pour $i = 0 to "taille du fichieren octets" step "la vitesse d'upload en octets"
$wait = temps en millisecondes("taille du fichier" / "la vitesse d'upload en octets")

et la progress bar de la progression totale :

Code : Tout sélectionner

For $j = 0 To ($DirSize[1]+$DirSize[2]) Step 1
    GUICtrlSetData($ProgressDir, $j)
    Next
($DirSize[1]+$DirSize[2]) = nombre de fichier + nombre de dossier

20 heures que je passe a faire des centaines de tests sans parvenir a quelques chose, je dois etre mauvais ou alors j'ai pas compris le fonctionnement de la progressbar (1ere utilisation )

si une bonne ame pouvais me les placer correctement... je pense qu'elle vont dans les fonctions _FTPPutFile ou _FTPPutFolderContents au meme titre que la ligne 373

Code : Tout sélectionner

GUICtrlSetData($PFText, StringLeft($s_LocalFolder, 3) & "....." & StringRight($s_LocalFolder, 15) & "\" & $file & " (" & Round(FileGetSize($s_LocalFolder & "\" & $file) / 1024, 2) & " Ko.)")
FTPRO2008.zip
petit oubli, pensez a creer des dossiers sur votre serveur pour que le script fonctionne ou modifiez le :
testRO2008/Babas
testRO2008/Alain

Re: [..] Où placer mon code de ProgressBar ?

Posté : jeu. 05 juin 2008 07:23
par Tlem
Salut arrkhan, j'espère que ton petit séjour c'est déroulé pour le mieux et que tu t'est bien amusé.

En ce qui concerne ton problème, voici un code qui permet d'afficher une progressBar au téléchargement d'un fichier :

Code : Tout sélectionner

HotKeySet("{ESC}", "_InetGetAbort")

$FileUrl = "http://www.autoitscript.com/autoit3/files/beta/autoit/archive/autoit-v3.2.12.0-rc4-setup.exe"
$FileSize = InetGetSize($FileUrl)

$FileName = StringRegExpReplace($FileUrl, "^.*/", "")

InetGet($FileUrl,@scriptdir & "\" & $FileName, 1, 1)

ProgressOn("Download progress for "&$FileName, "", "0%")
While @InetGetActive
    $Prog = Int((100 * @InetGetBytesRead) / $FileSize)
    ProgressSet($prog, @InetGetBytesRead & "/" & $FileSize & " bytes", "Downloading "&$FileName)
    Sleep(250)
WEnd

Func _InetGetAbort()
    InetGet("abort")
EndFunc ;==> _InetGetAbort()
Pour l'utilisation de InetGetSize avec une adresse FTP et Login/passwd voir l'aide de la commande.
Voilà j'espère que cela peut aider.

Re: [..] Où placer mon code de ProgressBar ?

Posté : jeu. 05 juin 2008 14:25
par arrkhan
beh en fait non, t'as pas du jeter un oeil a mon script :wink:

je cherche pas a faire une progressbar de telechargement, mais d'upload, et hormis ses 2 commandes mon script et terminé, gestion des erreur faite...
le probleme est que je ne sais foutrement pas ou les placer dans le corps du code :?

merci d avance

Re: [..] Où placer mon code de ProgressBar ?

Posté : jeu. 05 juin 2008 17:07
par jbnh
Coucou

Bon avant de regarder ton code j'avais déjà essayé de faire une progress bar pour upload mais sans grands résultats

Voila un peu de quoi ça à l'air:

Code : Tout sélectionner

#include <FTP.au3>

$server = 'server'
$username = 'login'
$pass = 'password'
$SourceFile ='test.txt'
$SourceSize = FileGetSize($SourceFile)
$DestFileSize = 1

$Open = _FTPOpen('MyFTP Control')
$Conn = _FTPConnect($Open, $server, $username, $pass)
$Ftpd = _FTPDelFile($Conn, 'test.txt')
$Ftpp = _FtpPutFile($Conn, $SourceFile, 'test.txt')

ProgressOn("Uploading", "")
    While $DestFileSize < $SourceSize
        Sleep(100)
        $DestFileSize = InetGetSize("file2")
        $Percent = round(($DestFileSize/$SourceSize)*100,0)
        ProgressSet($Percent, $Percent & "% done")
    WEnd
ProgressOff()
msgbox (0, "Error", 'Uploaded')
Si vous trouvez pourquoi , dites le, on pourra peut être adapter pour arrkhan par la suite !

Re: [..] Où placer mon code de ProgressBar ?

Posté : jeu. 05 juin 2008 19:14
par arrkhan
ben le probleme, c'est que je voudrais que ma progressbar soit dependante de ma gui, apparement ProgressOn cree une gui specifique.

Re: [..] Où placer mon code de ProgressBar ?

Posté : ven. 06 juin 2008 01:26
par arrkhan
bon, ca progresse enfin depuis 3 jours que je suis dessus, pour une progressbar de progression de fichier il faut quelques peu modifier la fonction _FTPPutFolderContents en entourant la fonction _FTPPutFile qu'il contient de :

Code : Tout sélectionner

Dim $i
                
                $Step = 100 * ($SpeedKo * 1024) / FileGetSize($s_LocalFolder & "\" & $file)
                
                If FileGetSize($s_LocalFolder & "\" & $file) < ($SpeedKo * 1024) Then
                    $Step = 100
                EndIf
                
                For $i = 0 To 100 Step $Step
                    GUICtrlSetData($ProgressFile, $i)
             
                    _FTPPutFile($l_InternetSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, 0, 0)

                Next
meme si ce n'est pas parfait, ca donne une idee...

je tente de faire la meme chose avec la progression totale

Re: [..] Où placer mon code de ProgressBar ?

Posté : ven. 06 juin 2008 05:01
par arrkhan
bon ben c'est bon, tout marche enfin comme je veux, je vous met la fonction modifié, ca peut servir a d'autres

Code : Tout sélectionner

Func _FTPPutFolderContents($l_InternetSession, $s_LocalFolder, $s_RemoteFolder, $b_RecursivePut)

    ; Shows the filenames of all files in the current directory.
    $search = FileFindFirstFile($s_LocalFolder & "\*?.?*") ; petite modif pour que ca fonctionne correctement

    ; Check if the search was successful
    If $search = -1 Then
        MsgBox(0, $APPTitle & " - Erreur", "Dossier invalide.") ; $AppTitle = "nom de l exe"
    EndIf
    
    While 1
        
        $file = FileFindNextFile($search)
        
        If @error Then ExitLoop
        
        $PathCourt = StringLeft($s_LocalFolder, 3) & "....." & StringRight($s_LocalFolder, 15) & "\" & $file
        GUICtrlSetData($PFText, $PathCourt & " (" & Round(FileGetSize($s_LocalFolder & "\" & $file) / 1024, 2) & " Ko.)")

        If StringInStr(FileGetAttrib($s_LocalFolder & "\" & $file), "D") Then
            _FTPMakeDir($l_InternetSession, $s_RemoteFolder & "/" & $file)
            
            If $b_RecursivePut Then
                
                _FTPPutFolderContents($l_InternetSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, $b_RecursivePut)
                
            EndIf
            
        Else
            Dim $i
            
            $Step = Round(100 * (vitesse d'upload en octet) / FileGetSize($s_LocalFolder & "\" & $file), 0)
    
            If FileGetSize($s_LocalFolder & "\" & $file) < ($SpeedKo * 1024) Then
                $Step = 100
            EndIf
            
            For $i = 0 To 100 Step $Step
                $progdir = 100 / (($DirSize[1] + $DirSize[2]) * 2) ; $DirSize = Dirgetsize("folder en question")
                GUICtrlSetData($ProgressDir, GUICtrlRead($ProgressDir) + $progdir)
                
                GUICtrlSetData($ProgressFile, $i)
                
                _FTPPutFile($l_InternetSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, 0, 0)
            Next
            
            $progdir = 100 / (($DirSize[1] + $DirSize[2]) * 2)
            GUICtrlSetData($ProgressDir, GUICtrlRead($ProgressDir) + $progdir)

        EndIf
        
    WEnd
    
    ; Close the search handle
    FileClose($search)

EndFunc   ;==>_FTPPutFolderContents
ca fait plaiz', en fait 1 semaine que j'etais la dessus ^^'

Re: [..] Où placer mon code de ProgressBar ?

Posté : ven. 06 juin 2008 08:15
par jbnh
niquel, bien joué :)

Re: [R] Où placer mon code de ProgressBar ?

Posté : ven. 06 juin 2008 17:10
par arrkhan
en fait non, ce n'est toujours pas bon, ca le fait avec les fichiers moins gros que le step car auquel cas step = 100 et on passe au fichier suivant, pour les fichier plus gros que le step, il increment d'un step le progressbar, "ul" le fichier entiers next reincrement d'un step, re "ul" le fichier entier, etc, etc, etc j'usqu'a 100, du coup ca sert pas a grand chose...

Re: [R] Où placer mon code de ProgressBar ?

Posté : lun. 17 nov. 2008 14:57
par Flop
quelqu'un a reussi a faire une progress bar ? je cherche a faire une progressbar d'upload et le dessiner dans ma gui si possible, j'ai réussi pour un download mais pas dans l'autre sens